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: Sat, 10 Aug 2024 07:14:45 +0200	[thread overview]
Message-ID: <20240810051445.C307522398@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: 1891 bytes --]

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

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

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

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

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

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

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

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Indicators do not load at the Unity greeter.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. (known problem with Unity for Arch, a workaround is to open Unity Control Center using sudo)

Closes #43579.

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

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

From f2d2109e0f16dea24c703739c4d00935a1bd6857 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 .../unity-polkit-authentication-agent.desktop |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  34 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 176 files changed, 7225 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..a935692f4b3673 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,36 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

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

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
new file mode 100644
index 00000000000000..bf82892b8ef2c0
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity PolicyKit Authentication Agent
+NoDisplay=true
+TryExec=/usr/libexec/polkit-gnome-authentication-agent-1
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..32eb1348d67c9f
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-polkit-authentication-agent;unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..8da15186db1e5a
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus polkit-gnome unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-polkit-authentication-agent.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

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

  parent reply	other threads:[~2024-08-10  5:14 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
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 [this message]
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=20240810051445.C307522398@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).