Github messages for voidlinux
 help / color / mirror / Atom feed
From: EarldridgeJazzedPineda <EarldridgeJazzedPineda@users.noreply.github.com>
To: ml@inbox.vuxu.org
Subject: Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
Date: Mon, 05 Aug 2024 14:21:00 +0200	[thread overview]
Message-ID: <20240805122100.3DC3422119@inbox.vuxu.org> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-51509@inbox.vuxu.org>

[-- 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"

  parent reply	other threads:[~2024-08-05 12:21 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-28  6:03 [PR PATCH] " 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 [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240805122100.3DC3422119@inbox.vuxu.org \
    --to=earldridgejazzedpineda@users.noreply.github.com \
    --cc=ml@inbox.vuxu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).