diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml
new file mode 100644
index 0000000000..4492d8d81c
--- /dev/null
+++ b/.github/workflows/bootstrap.yml
@@ -0,0 +1,69 @@
+name: Bootstrap Andaman and Subatomic (Fedora 37)
+
+on:
+ workflow_dispatch:
+
+jobs:
+ bootstrap:
+ strategy:
+ matrix:
+ version: ["37"]
+ arch: ["x86_64", "aarch64"]
+ fail-fast: true
+ runs-on: ${{ matrix.arch == 'aarch64' && 'ARM64' || 'ubuntu-latest' }}
+ container:
+ image: fedora:37
+ options: --cap-add=SYS_ADMIN --privileged
+ steps:
+ - uses: actions/setup-go@v3
+ with:
+ go-version: "^1.19"
+
+ - name: Install repositories
+ run: |
+ sudo dnf install -y dnf-plugins-core
+ sudo dnf config-manager --add-repo https://github.com/terrapkg/subatomic-repos/raw/main/terra${{ matrix.version }}.repo
+ sudo dnf install -y mock createrepo_c rpm-build anda-mock-configs gcc curl wget git-core openssl-devel
+
+ - uses: actions/checkout@v3
+ with:
+ repository: FyraLabs/subatomic
+ set-safe-directory: true
+ fetch-depth: 1
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ - name: Install Anda
+ uses: actions-rs/cargo@v1
+ with:
+ command: install
+ args: anda
+
+ - name: Build Subatomic
+ run: |
+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
+ anda build -c anda-37-${{ matrix.arch }} subatomic -p rpm -D "autogitcommit $(git log -1 --format='%H')"
+ - name: Install Subatomic
+ run: sudo dnf install -y ./anda-build/rpm/rpms/subatomic-*.rpm
+
+ - uses: actions/checkout@v3
+ with:
+ repository: FyraLabs/anda
+
+ - name: Build Andaman
+ run: anda build -c anda-37-${{ matrix.arch }} anda -p rpm
+
+ - name: Upload to Subatomic
+ run: |
+ subatomic-cli upload --prune \
+ --server https://subatomic.fyralabs.com \
+ --token ${{ secrets.SUBATOMIC_TOKEN }} \
+ terra${{ matrix.version }} anda-build/rpm/rpms/*
+
+ - name: Upload to Subatomic
+ run: |
+ subatomic-cli upload --prune \
+ --server https://subatomic.fyralabs.com \
+ --token ${{ secrets.SUBATOMIC_TOKEN }} \
+ terra${{ matrix.version }} anda-build/rpm/rpms/*
diff --git a/anda/apps/authy/authy.spec b/anda/apps/authy/authy.spec
index d62744d743..9e049009f3 100644
--- a/anda/apps/authy/authy.spec
+++ b/anda/apps/authy/authy.spec
@@ -1,10 +1,10 @@
Name: authy
-Version: 2.2.2
-Release: 2%{?dist}
+Version: 2.2.3
+Release: 1%{?dist}
Summary: Two factor authentication desktop application
License: Unknown
URL: https://authy.com/
-Source0: https://api.snapcraft.io/api/v1/snaps/download/H8ZpNgIoPyvmkgxOWw5MSzsXK1wRZiHn_12.snap
+Source0: https://api.snapcraft.io/api/v1/snaps/download/H8ZpNgIoPyvmkgxOWw5MSzsXK1wRZiHn_18.snap
Requires: gtk3
Requires: nss
BuildRequires: squashfs-tools
diff --git a/anda/apps/discord-canary-openasar/discord-canary-openasar.spec b/anda/apps/discord-canary-openasar/discord-canary-openasar.spec
index a8ba902409..38d32c7f7a 100644
--- a/anda/apps/discord-canary-openasar/discord-canary-openasar.spec
+++ b/anda/apps/discord-canary-openasar/discord-canary-openasar.spec
@@ -1,7 +1,7 @@
%define debug_package %{nil}
Name: discord-canary-openasar
-Version: 0.0.148
+Version: 0.0.149
Release: 1%{?dist}
Summary: OpenAsar is a rewrite of part of Discord's desktop code, making it snappier and include more features like further customization and theming
License: MIT and https://discord.com/terms
diff --git a/anda/apps/discord-canary/discord-canary.spec b/anda/apps/discord-canary/discord-canary.spec
index 8253a8b4ab..158d96148c 100644
--- a/anda/apps/discord-canary/discord-canary.spec
+++ b/anda/apps/discord-canary/discord-canary.spec
@@ -1,7 +1,7 @@
%define debug_package %{nil}
Name: discord-canary
-Version: 0.0.148
+Version: 0.0.149
Release: 1%{?dist}
Summary: Free Voice and Text Chat for Gamers.
URL: discord.com
diff --git a/anda/dart/dart.spec b/anda/dart/dart.spec
index 3031ddb9b3..f1ec48c698 100644
--- a/anda/dart/dart.spec
+++ b/anda/dart/dart.spec
@@ -1,7 +1,7 @@
%define debug_package %{nil}
Name: dart
-Version: 2.19.2
+Version: 2.19.4
Release: 1%{?dist}
Summary: The Dart Language
License: BSD-3-Clause
diff --git a/anda/desktops/budgie/budgie-extras/budgie-extras.spec b/anda/desktops/budgie/budgie-extras/budgie-extras.spec
index 567150a36b..3952b190ef 100644
--- a/anda/desktops/budgie/budgie-extras/budgie-extras.spec
+++ b/anda/desktops/budgie/budgie-extras/budgie-extras.spec
@@ -1,7 +1,7 @@
Name: budgie-extras
-Version: 1.5.90
-Release: 1%{dist}
+Version: 1.5.91
+Release: 1%{?dist}
License: GPLv3
Summary: Additional Budgie Desktop enhancements for user experience
diff --git a/anda/desktops/compiz9/compiz9.spec b/anda/desktops/compiz9/compiz9.spec
index 39ec3425a6..6892e32632 100644
--- a/anda/desktops/compiz9/compiz9.spec
+++ b/anda/desktops/compiz9/compiz9.spec
@@ -1,4 +1,5 @@
%define _ubuntu_rel 22.10.20220822-0ubuntu1
+%global _hardened_build 0
Name: compiz9
Version: 0.9.14.2
@@ -9,6 +10,8 @@ License: GPLv2+ AND LGPLv2+ AND MIT
URL: https://launchpad.net/compiz
Source0: http://archive.ubuntu.com/ubuntu/pool/universe/c/compiz/compiz_%{version}+%{_ubuntu_rel}.tar.xz
Patch0: https://raw.githubusercontent.com/cat-master21/unityDE-specs/main/patches/compiz-cmake-install-path.patch
+Patch1: gtk-extents.patch
+Patch2: focus-prevention-disable.patch
Conflicts: compiz
BuildRequires: libX11-devel
@@ -77,7 +80,7 @@ Compiz 9 branch, which is newer then what Fedora packages and required by Unity
%build
# The driver blacklist hack is obselete
sed -i 's/(nouveau|Intel).*Mesa 8.0//' plugins/opengl/opengl.xml.in
-%cmake -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DBUILD_GTK=ON -DBUILD_METACITY=ON -DCOMPIZ_BUILD_TESTING=OFF -DBUILD_GLES=ON -DCOMPIZ_PACKAGING_ENABLED=TRUE -DBUILD_XORG_GTEST=OFF -DCOMPIZ_BUILD_WITH_RPATH=FALSE -DCOMPIZ_WERROR=OFF
+%cmake -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DBUILD_GTK=ON -DBUILD_METACITY=ON -DCOMPIZ_BUILD_TESTING=OFF -DBUILD_GLES=OFF -DCOMPIZ_PACKAGING_ENABLED=TRUE -DBUILD_XORG_GTEST=OFF -DCOMPIZ_BUILD_WITH_RPATH=FALSE -DCOMPIZ_WERROR=OFF
%cmake_build
%install
diff --git a/anda/desktops/compiz9/focus-prevention-disable.patch b/anda/desktops/compiz9/focus-prevention-disable.patch
new file mode 100644
index 0000000000..df2fcef106
--- /dev/null
+++ b/anda/desktops/compiz9/focus-prevention-disable.patch
@@ -0,0 +1,12 @@
+diff -Naur original/metadata/core.xml.in modified/metadata/core.xml.in
+--- original/metadata/core.xml.in 2013-07-23 20:58:03.000000000 +0100
++++ modified/metadata/core.xml.in 2014-06-11 09:06:53.839302487 +0100
+@@ -114,7 +114,7 @@
+ <_long>Level of focus stealing prevention
+ 0
+ 4
+- 1
++ 0
+
+ 0
+ <_name>Off
diff --git a/anda/desktops/compiz9/gtk-extents.patch b/anda/desktops/compiz9/gtk-extents.patch
new file mode 100644
index 0000000000..5c8ec1ec20
--- /dev/null
+++ b/anda/desktops/compiz9/gtk-extents.patch
@@ -0,0 +1,13 @@
+# Diff from https://code.launchpad.net/~albertsmuktupavels/compiz/add-gtk-frame-extents-to-net-supported/+merge/257303
+=== modified file 'src/screen.cpp'
+--- a/src/screen.cpp 2014-12-02 19:37:10 +0000
++++ b/src/screen.cpp 2015-04-23 20:41:24 +0000
+@@ -2362,6 +2362,7 @@
+
+ atoms.push_back (Atoms::wmUserTime);
+ atoms.push_back (Atoms::frameExtents);
++ atoms.push_back (Atoms::frameGtkExtents);
+ atoms.push_back (Atoms::frameWindow);
+
+ atoms.push_back (Atoms::winState);
+
diff --git a/anda/desktops/elementary/elementary-files/elementary-files.spec b/anda/desktops/elementary/elementary-files/elementary-files.spec
index 200b1478d2..c50a1f342f 100644
--- a/anda/desktops/elementary/elementary-files/elementary-files.spec
+++ b/anda/desktops/elementary/elementary-files/elementary-files.spec
@@ -5,7 +5,7 @@
Name: elementary-files
Summary: File manager from elementary
-Version: 6.2.2
+Version: 6.3.0
Release: 1%{?dist}
License: GPLv3
diff --git a/anda/desktops/elementary/gala/gala.spec b/anda/desktops/elementary/gala/gala.spec
index be03833605..35dd6b1433 100644
--- a/anda/desktops/elementary/gala/gala.spec
+++ b/anda/desktops/elementary/gala/gala.spec
@@ -2,8 +2,8 @@
Name: gala
Summary: Gala window manager
-Version: 7.0.0
-Release: %autorelease
+Version: 7.0.1
+Release: 1%{?dist}
License: GPLv3+
URL: https://github.com/elementary/gala
diff --git a/anda/desktops/elementary/granite-7/granite-7.spec b/anda/desktops/elementary/granite-7/granite-7.spec
index 77da59b086..c9479e1159 100644
--- a/anda/desktops/elementary/granite-7/granite-7.spec
+++ b/anda/desktops/elementary/granite-7/granite-7.spec
@@ -5,7 +5,7 @@ apps built for elementary.}
Name: granite-7
Summary: elementary companion library for GTK+ and GLib
-Version: 7.1.0
+Version: 7.2.0
Release: 1%{?dist}
License: LGPLv3+
@@ -60,11 +60,11 @@ This package contains the development headers.
%find_lang granite-7
%check
-desktop-file-validate \
- %{buildroot}/%{_datadir}/applications/io.elementary.granite-7.demo.desktop
+%dnl desktop-file-validate \
+%dnl %{buildroot}/%{_datadir}/applications/io.elementary.granite-7.demo.desktop
-appstream-util validate-relax --nonet \
- %{buildroot}/%{_datadir}/metainfo/granite-7.appdata.xml
+%dnl appstream-util validate-relax --nonet \
+%dnl %{buildroot}/%{_datadir}/metainfo/granite-7.appdata.xml
%files -f granite-7.lang
@@ -76,6 +76,8 @@ appstream-util validate-relax --nonet \
%{_libdir}/girepository-1.0/Granite-7.0.typelib
%{_datadir}/metainfo/granite-7.appdata.xml
+%{_datadir}/icons/hicolor/*/apps/io.elementary.granite-7.svg
+
%files devel
%{_bindir}/granite-7-demo
diff --git a/anda/desktops/elementary/wingpanel-indicator-network/wingpanel-indicator-network.spec b/anda/desktops/elementary/wingpanel-indicator-network/wingpanel-indicator-network.spec
index 990a16be9f..20c71c9d3e 100644
--- a/anda/desktops/elementary/wingpanel-indicator-network/wingpanel-indicator-network.spec
+++ b/anda/desktops/elementary/wingpanel-indicator-network/wingpanel-indicator-network.spec
@@ -5,7 +5,7 @@
Name: wingpanel-indicator-network
Summary: Network Indicator for wingpanel
-Version: 2.3.4
+Version: 7.0.1
Release: 1%{?dist}
License: GPLv3+
@@ -51,7 +51,7 @@ A network indicator for wingpanel.
%check
appstream-util validate-relax --nonet \
- %{buildroot}/%{_datadir}/metainfo/%{appname}.appdata.xml
+ %{buildroot}/%{_datadir}/metainfo/%{appname}.metainfo.xml
%files -f network-indicator.lang
@@ -60,7 +60,7 @@ appstream-util validate-relax --nonet \
%{_libdir}/wingpanel/libnetwork.so
-%{_datadir}/metainfo/%{appname}.appdata.xml
+%{_datadir}/metainfo/%{appname}.metainfo.xml
%changelog
diff --git a/anda/desktops/kde/latte-dock-nightly/latte-dock-nightly.spec b/anda/desktops/kde/latte-dock-nightly/latte-dock-nightly.spec
index ad5f93dfce..e495535340 100644
--- a/anda/desktops/kde/latte-dock-nightly/latte-dock-nightly.spec
+++ b/anda/desktops/kde/latte-dock-nightly/latte-dock-nightly.spec
@@ -1,6 +1,6 @@
%global forgeurl https://github.com/KDE/latte-dock/
-%global commit 491a5b0f4958145697f2bbdcc247c34931675f16
+%global commit a0a4911a69daa9a7a15f5dc292a604441648da6f
%global shortcommit %(c=%{commit}; echo ${c:0:7})
%global commit_date %(date '+%Y%m%d')
%global snapshot_info %{commit_date}.%{shortcommit}
diff --git a/anda/desktops/unity-shell/0001-Remove-xpathselect-dependency.patch b/anda/desktops/unity-shell/0001-Remove-xpathselect-dependency.patch
new file mode 100644
index 0000000000..10f2113ee9
--- /dev/null
+++ b/anda/desktops/unity-shell/0001-Remove-xpathselect-dependency.patch
@@ -0,0 +1,544 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 03be190..f2188a6 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -251,7 +251,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 38f433a..1276be8 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@ UnityScreen::UnityScreen(CompScreen* screen)
+ , WM(PluginAdapter::Initialize(screen))
+ , menus_(std::make_shared(std::make_shared(), std::make_shared()))
+ , deco_manager_(std::make_shared(menus_))
+- , debugger_(this)
+ , session_(std::make_shared())
+ , needsRelayout(false)
+ , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 403caf1..a386438 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"
+@@ -343,7 +342,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_;
+ spread::Widgets::Ptr spread_widgets_;
+
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index 673c7dd..bebb264 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 .
+- *
+- * Authored by: Alex Launi
+- * Thomi Richards
+- * Marco Trevisan
+- */
+-
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-#include
+-
+-#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, public xpathselect::Node
+- {
+- public:
+- typedef std::shared_ptr 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(value) == prop_value.GetByte();
+- case G_VARIANT_CLASS_INT16:
+- return value == prop_value.GetInt16();
+- case G_VARIANT_CLASS_UINT16:
+- return static_cast(value) == prop_value.GetUInt16();
+- case G_VARIANT_CLASS_INT32:
+- return value == prop_value.GetInt32();
+- case G_VARIANT_CLASS_UINT32:
+- return static_cast(value) == prop_value.GetUInt32();
+- case G_VARIANT_CLASS_INT64:
+- return value == prop_value.GetInt64();
+- case G_VARIANT_CLASS_UINT64:
+- return static_cast(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 Children() const
+- {
+- std::vector children;
+- auto const& this_ptr = shared_from_this();
+-
+- for (auto* child : node_->GetIntrospectableChildren())
+- {
+- if (!child)
+- continue;
+-
+- children.push_back(std::make_shared(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(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 =
+- " "
+- " "
+- ""
+- " "
+- " "
+- " "
+- " "
+- ""
+- " "
+- " "
+- " "
+- ""
+- " "
+- ""
+- " "
+- ""
+- " "
+- " "
+- " "
+- ""
+- " "
+- " "
+- ""
+- " "
+- " "
+- " "
+- " "
+- ""
+- " "
+- " "
+- " "
+- " "
+- ""
+- " "
+- " ";
+-}
+-
+-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(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(introspection_root_);
+- for (auto const& n : xns_.SelectNodes(root_node, query))
+- {
+- auto p = std::static_pointer_cast(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 .
+- *
+- * Authored by: Alex Launi
+- * Marco Trevisan
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+- DebugDBusInterface(Introspectable* root);
+- ~DebugDBusInterface();
+-
+-private:
+- struct Impl;
+- std::unique_ptr impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
diff --git a/anda/desktops/unity-shell/0002-Remove-ido-dependency.patch b/anda/desktops/unity-shell/0002-Remove-ido-dependency.patch
new file mode 100644
index 0000000000..be51aa65e0
--- /dev/null
+++ b/anda/desktops/unity-shell/0002-Remove-ido-dependency.patch
@@ -0,0 +1,32 @@
+diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt
+index 2829cd2..4ec220d 100644
+--- a/services/CMakeLists.txt
++++ b/services/CMakeLists.txt
+@@ -11,7 +11,6 @@ set(UNITY_PANEL_SERVICE_DEPS
+ gtk+-3.0>=3.3
+ indicator3-0.4>=12.10.2
+ x11
+- libido3-0.1>=13.0.0
+ )
+
+ pkg_check_modules(SERVICE_DEPS REQUIRED ${UNITY_PANEL_SERVICE_DEPS})
+diff --git a/services/panel-main.c b/services/panel-main.c
+index f6488ba..d3dc59b 100644
+--- a/services/panel-main.c
++++ b/services/panel-main.c
+@@ -22,7 +22,6 @@
+ #include
+ #include
+ #include
+-#include
+
+ #include "config.h"
+ #include "panel-a11y.h"
+@@ -466,7 +465,6 @@ main (gint argc, gchar **argv)
+
+ gtk_init (&argc, &argv);
+ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default(), INDICATORICONDIR);
+- ido_init ();
+
+ context = g_option_context_new ("- Unity Panel Service");
+ g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
diff --git a/anda/desktops/unity-shell/0003-Remove-social-scope.patch b/anda/desktops/unity-shell/0003-Remove-social-scope.patch
new file mode 100644
index 0000000000..a6d29401c7
--- /dev/null
+++ b/anda/desktops/unity-shell/0003-Remove-social-scope.patch
@@ -0,0 +1,13 @@
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 787c048..e81adcc 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -187,7 +187,7 @@
+
+
+
+- [ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]
++ [ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]
+ List of scope ids specifying which scopes should be created and the order to display them in.
+ The scopes listed in the scope bar will be ordered according to this list.
+
diff --git a/anda/desktops/unity-shell/anda.hcl b/anda/desktops/unity-shell/anda.hcl
new file mode 100644
index 0000000000..d6b210a81c
--- /dev/null
+++ b/anda/desktops/unity-shell/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "unity-shell.spec"
+ }
+}
diff --git a/anda/desktops/unity-shell/unity-shell.spec b/anda/desktops/unity-shell/unity-shell.spec
new file mode 100644
index 0000000000..c2df750fdc
--- /dev/null
+++ b/anda/desktops/unity-shell/unity-shell.spec
@@ -0,0 +1,225 @@
+%global forgeurl https://gitlab.com/ubuntu-unity/unity/unity
+%global commit 0ba4fbaa112a37e7756c64f339f0569483d1e52f
+%forgemeta
+
+Name: unity-shell
+Version: 1.7.7
+Release: %autorelease
+Summary: Unity is a shell that sings
+
+License: GPLv3+
+# forgeurl doesn't really work with spectool, tries https://gitlab.com/ubuntu-unity/unity instead of https://gitlab.com/ubuntu-unity/unity/unity
+URL: https://gitlab.com/ubuntu-unity/unity/unity
+Source0: %{url}/-/archive/%commit/unity-%commit.tar.bz2
+Patch0: 0001-Remove-xpathselect-dependency.patch
+Patch1: 0002-Remove-ido-dependency.patch
+Patch2: 0003-Remove-social-scope.patch
+
+BuildRequires: cmake
+BuildRequires: g++
+BuildRequires: gcc
+BuildRequires: dee-devel
+BuildRequires: gnome-desktop3-devel
+BuildRequires: pkgconfig(zeitgeist-2.0)
+BuildRequires: libappstream-glib-devel
+BuildRequires: libdbusmenu-devel
+BuildRequires: bamf-devel
+BuildRequires: libindicator-gtk3-devel
+BuildRequires: json-glib-devel
+BuildRequires: libnotify-devel
+BuildRequires: libsigc++20-devel
+BuildRequires: libunity-devel
+BuildRequires: doxygen
+BuildRequires: pam-devel
+BuildRequires: boost-devel
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: pkgconfig(libstartup-notification-1.0)
+BuildRequires: pkgconfig(nux-4.0)
+BuildRequires: compiz9-devel
+BuildRequires: pkgconfig(unity-misc)
+BuildRequires: chrpath
+BuildRequires: systemd-rpm-macros
+BuildRequires: pkgconfig(libunity-settings-daemon)
+Requires: python3-gobject
+Requires: dconf
+Requires: gsettings-ubuntu-touch-schemas
+Requires: %{name}-data = %{version}-%{release}
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: pam
+Requires: bamf-daemon
+Requires: unity-gtk-module-common
+Requires: compiz9
+Requires: libindicator-gtk3
+Recommends: unity-greeter
+Recommends: unity-scope-home
+
+%description
+Unity is a desktop experience that sings. Designed by Canonical and the Ayatana
+community, Unity is all about the combination of familiarity and the future. We
+bring together visual design, analysis of user experience testing, modern
+graphics technologies and a deep understanding of the free software landscape to
+produce what we hope will be the lightest, most elegant and most delightful way
+to use your PC.
+
+The Unity desktop experience is designed to allow for multiple implementations,
+currently, Unity consists of a Compiz plugin based visual interface only, which
+is heavily dependent on OpenGL.
+
+%package core
+Summary: Core library for the Unity shell
+Group: System Environment/Libraries
+Requires: %{name}-data = %{version}-%{release}
+
+%description core
+This package contains the core library needed for Unity and Unity 2D.
+
+%package core-devel
+Summary: Development files for the core Unity library
+Group: Development/Libraries
+Requires: %{name}-core%{?_isa} = %{version}-%{release}
+Requires: pkgconfig(dee-1.0)
+Requires: pkgconfig(glib-2.0)
+Requires: pkgconfig(sigc++-2.0)
+Requires: pkgconfig(unity)
+Requires: pkgconfig(nux-4.0)
+
+%description core-devel
+This package contains the development files the core Unity library.
+
+%package data
+Summary: Common files for the Unity shell
+BuildArch: noarch
+Group: User Interface/Desktops
+# For /usr/etc/pam.d/unity
+Recommends: gnome-keyring-pam
+Requires: %{name} = %{version}-%{release}
+
+%description data
+This package contains data (non-arch specific) files to Unity 7.
+
+%package -n python3-uwidgets
+Summary: Widgets for Unity7
+Requires: %{name} = %{version}-%{release}
+
+%description -n python3-uwidgets
+This package contains support for widgets for Unity7, based on Blighty.
+
+%prep
+%autosetup -n unity-%commit -p1
+# Correct/not use ubuntu's API
+sed -i 's/ubuntu-lock-on-suspend/lock-enabled/' lockscreen/LockScreenSettings.cpp
+# Not actually needed for Unity itself
+sed -i '/libgeis/d' CMakeLists.txt
+
+%build
+%cmake -DUNITY_PROTOCOL_PRIVATE_LIB=%{_libdir}/libunity/libunity-protocol-private.so.0.0.0 -DCOMPIZ_BUILD_WITH_RPATH=FALSE -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE
+
+%cmake_build
+
+pushd uwidgets/
+%py3_build
+popd
+
+%install
+pushd uwidgets/
+%py3_install
+popd
+
+%cmake_install
+
+# Not the correct directory, /usr/etc/pam.d should be /etc/pam.d
+mv -f %{buildroot}%{_prefix}%{_sysconfdir}/* %{buildroot}%{_sysconfdir}
+rm -rf %{buildroot}%{_prefix}%{_sysconfdir}
+# Upstart init is dead a long time ago and there isn't any package that provides anything to do with it.
+rm -rf %{buildroot}%{_datadir}/upstart
+# Needed directory for unity-panel-service
+mkdir %{buildroot}%{_datadir}/unity/indicators
+
+%find_lang unity
+
+chrpath --delete $RPM_BUILD_ROOT%{_libdir}/compiz/libunityshell.so
+chrpath --delete $RPM_BUILD_ROOT%{_libdir}/compiz/libunitymtgrabhandles.so
+chrpath --delete $RPM_BUILD_ROOT%{_libdir}/libunity-core-6.0.so.9.0.0
+
+%py3_shebang_fix $RPM_BUILD_ROOT%{_bindir}/unity
+%py3_shebang_fix $RPM_BUILD_ROOT%{_libdir}/unity/makebootchart.py
+
+%ldconfig_post
+
+%postun
+if [ ${1} -eq 0 ]; then
+ glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || :
+fi
+
+%posttrans
+glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || :
+
+%files
+%doc AUTHORS ChangeLog HACKING README
+%license COPYING COPYING.LGPL
+%{_bindir}/unity
+%{_libdir}/compiz/libunitymtgrabhandles.so
+%{_libdir}/compiz/libunityshell.so
+%{_mandir}/man1/unity.1.gz
+%{_mandir}/man1/unity-panel-service.1.gz
+%dir %{_libdir}/unity/
+%{_libdir}/unity/compiz-config-profile-setter
+%{_libdir}/unity/compiz-profile-selector
+%{_libdir}/unity/systemd-prestart-check
+%{_libdir}/unity/makebootchart.py
+%{_libdir}/unity/unity-panel-service
+%{_libdir}/unity/unity-active-plugins-safety-check
+%{_libdir}/unity/upstart-prestart-check
+
+%files core
+%doc AUTHORS ChangeLog HACKING README
+%license COPYING COPYING.LGPL
+%{_libdir}/libunity-core-6.0.so.*
+
+%files core-devel
+%doc AUTHORS ChangeLog HACKING README
+%license COPYING COPYING.LGPL
+%dir %{_includedir}/Unity-6.0/
+%dir %{_includedir}/Unity-6.0/UnityCore/
+%{_includedir}/Unity-6.0/UnityCore/*.h
+%{_libdir}/libunity-core-6.0.so
+%{_libdir}/pkgconfig/unity-core-6.0.pc
+
+%files data -f unity.lang
+%doc AUTHORS ChangeLog HACKING README
+%license COPYING COPYING.LGPL
+%{_datadir}/ccsm/icons/hicolor/64x64/apps/plugin-unityshell.png
+%{_datadir}/glib-2.0/schemas/com.canonical.Unity.gschema.xml
+%{_datadir}/glib-2.0/schemas/org.compiz.unitymtgrabhandles.gschema.xml
+%{_datadir}/glib-2.0/schemas/org.compiz.unityshell.gschema.xml
+%dir %{_datadir}/unity/
+%dir %{_datadir}/unity/indicators/
+%dir %{_datadir}/unity/icons/
+%{_datadir}/unity/icons/dash-widgets.json
+%{_datadir}/unity/icons/*.png
+%{_datadir}/unity/icons/*.svg
+%{_datadir}/unity/icons/searchingthedashlegalnotice.html
+%dir %{_datadir}/unity/themes/
+%{_datadir}/unity/themes/dash-widgets.json
+%{_datadir}/compiz/unitymtgrabhandles.xml
+%{_datadir}/compiz/unityshell.xml
+%dir %{_datadir}/compiz/unitymtgrabhandles
+%dir %{_datadir}/compiz/unitymtgrabhandles/images/
+%{_datadir}/compiz/unitymtgrabhandles/images/handle-*.png
+%{_datadir}/gnome-control-center/keybindings/50-unity-launchers.xml
+%{_sysconfdir}/pam.d/unity
+%{_datadir}/compizconfig/upgrades/*.upgrade
+%{_sysconfdir}/compizconfig/unity*
+%{_userunitdir}/unity*.service
+%{_userunitdir}/unity*.target
+
+%files -n python3-uwidgets
+%doc AUTHORS ChangeLog HACKING README
+%license uwidgets/LICENSE.md
+%{_bindir}/uwidgets-runner
+%{python3_sitearch}/uwidgets-*.egg-info/
+%{python3_sitearch}/uwidgets/
+
+%changelog
+%autochangelog
diff --git a/anda/desktops/unityx-shell/0001-Remove-social-scope.patch b/anda/desktops/unityx-shell/0001-Remove-social-scope.patch
new file mode 100644
index 0000000000..15ba87317a
--- /dev/null
+++ b/anda/desktops/unityx-shell/0001-Remove-social-scope.patch
@@ -0,0 +1,13 @@
+diff --git a/data/org.unityd.UnityX.gschema.xml b/data/org.unityd.UnityX.gschema.xml
+index 6721d27..808b384 100644
+--- a/data/org.unityd.UnityX.gschema.xml
++++ b/data/org.unityd.UnityX.gschema.xml
+@@ -187,7 +187,7 @@
+
+
+
+- [ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]
++ [ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]
+ List of scope ids specifying which scopes should be created and the order to display them in.
+ The scopes listed in the scope bar will be ordered according to this list.
+
diff --git a/anda/desktops/unityx-shell/anda.hcl b/anda/desktops/unityx-shell/anda.hcl
new file mode 100644
index 0000000000..965a987a52
--- /dev/null
+++ b/anda/desktops/unityx-shell/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "unityx-shell.spec"
+ }
+}
diff --git a/anda/desktops/unityx-shell/unityx-shell.spec b/anda/desktops/unityx-shell/unityx-shell.spec
new file mode 100644
index 0000000000..53ebb79b14
--- /dev/null
+++ b/anda/desktops/unityx-shell/unityx-shell.spec
@@ -0,0 +1,216 @@
+%global forgeurl https://gitlab.com/ubuntu-unity/unity-x/unityx
+%global commit 46dd5199d1cce639f559eda4519aff77ef9c4433
+%forgemeta
+
+%define __python /usr/bin/python3
+
+Name: unityx-shell
+Version: 1.7.7
+Release: %autorelease
+Summary: UnityX is a smaller shell based on Unity7
+
+License: GPLv3 AND LGPLv3
+URL: https://gitlab.com/ubuntu-unity/unity-x/unityx
+Source0: %{url}/-/archive/%commit/unityx-%commit.tar.bz2
+Source2: https://gitlab.xfce.org/panel-plugins/xfce4-windowck-plugin/-/commit/dee596492f006d02e2b39abd072ddd7b37fefe82.diff
+Patch0: 0001-Remove-social-scope.patch
+
+BuildRequires: cmake
+BuildRequires: g++
+BuildRequires: gcc
+BuildRequires: chrpath
+BuildRequires: pkgconfig(dee-1.0)
+BuildRequires: pkgconfig(unity-settings-daemon)
+BuildRequires: pkgconfig(gnome-desktop-3.0)
+BuildRequires: zeitgeist-devel
+BuildRequires: libappstream-glib-devel
+BuildRequires: libdbusmenu-devel
+BuildRequires: bamf-devel
+BuildRequires: libindicator-gtk3-devel
+BuildRequires: json-glib-devel
+BuildRequires: libnotify-devel
+BuildRequires: libsigc++20-devel
+#BuildRequires: xpathselect-devel
+#BuildRequires: libunity-devel
+BuildRequires: doxygen
+BuildRequires: pam-devel
+BuildRequires: boost-devel
+BuildRequires: pkgconfig(nux-4.0)
+BuildRequires: pkgconfig(libstartup-notification-1.0)
+BuildRequires: pkgconfig(unity-protocol-private)
+# unityx-shell-xfce4-windowck-plugin
+BuildRequires: pkgconfig(libwnck-3.0)
+BuildRequires: pkgconfig(libxfconf-0)
+BuildRequires: pkgconfig(libxfce4util-1.0)
+BuildRequires: pkgconfig(libxfce4ui-2)
+BuildRequires: pkgconfig(libxfce4panel-2.0)
+BuildRequires: pkgconfig(gtk+-3.0)
+BuildRequires: xfce4-vala
+BuildRequires: xfce4-dev-tools
+BuildRequires: python3-devel
+
+# Various things are missing that it won't run and it gives a segmentfault if Unity is missing?
+# Needs more investigating
+Requires: unity-shell
+Requires: unity-scope-home
+Requires: python3-pydbus
+Requires: python3-psutil
+Requires: unity-asset-pool
+Requires: libunity-misc-devel
+Requires: geis-devel
+Requires: unity-settings-daemon
+Requires: unity-gtk3-module
+Requires: unity-gtk2-module
+Requires: libindicator-gtk3
+Requires: plotinus%{?_isa} = %{version}-%{release}
+Requires: bamf-daemon
+Requires: xbindkeys
+# For default configuration
+Requires: %{name}-xfce4-windowck-plugin%{?_isa} = %{version}-%{release}
+Requires: nemo
+Requires: blueman
+Requires: network-manager-applet
+Requires: xfce4-vala-panel-appmenu-plugin
+Requires: xfwm4
+
+%description
+UnityX is a shell based off code from Unity7 with lighter dependencies and more customizability.
+
+%package xfce4-windowck-plugin
+Summary: Core library for the Unity shell
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description xfce4-windowck-plugin
+This package contains the core library needed for Unity and Unity 2D.
+
+%package devel
+Summary: Development files for the core Unity library
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: pkgconfig(dee-1.0)
+Requires: pkgconfig(glib-2.0)
+Requires: pkgconfig(sigc++-2.0)
+Requires: pkgconfig(unity)
+Requires: pkgconfig(nux-4.0)
+
+%description devel
+This package contains the development files the core Unity library.
+
+%package -n plotinus
+Summary: Automatic testing for Unity
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description -n plotinus
+This package contains the autopilot framework, which allows for triggering
+keyboard and mouse events automatically. This package also contains the bindings
+needed for writing automated tests in Python.
+
+%prep
+%autosetup -n unityx-%commit -p1
+
+%build
+# Wrong paths
+sed -i 's!lib/{arch}-linux-gnu!%{_lib}!' unityx/unityx
+sed -i 's!%{_lib}/bamf/bamfdaemon!libexec/bamf/bamfdaemon!' unityx/unityx
+sed -i 's!unity-settings-daemon!%{_libexecdir}/unity-settings-daemon!' unityx/unityx
+%py3_shebang_fix unityx/unityx
+
+# Fix invalid argument calling dbus-update-activation-environment
+sed -i 's/'--all', //' unityx/unityx
+
+# The caches again!
+rm -fv unityx/windowck-plugin/po/.intltool-merge-cache*
+
+%cmake -DENABLE_X_SUPPORT=ON -DUNITY_PROTOCOL_PRIVATE_LIB=%{_libdir}/libunity/libunity-protocol-private.so.0.0.0 -DCOMPIZ_BUILD_WITH_RPATH=FALSE -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE
+%cmake_build
+
+pushd unityx/plotinus
+# Wrong path again
+sed -i 's/LIBRARY DESTINATION lib/LIBRARY DESTINATION %{_lib}/' CMakeLists.txt
+%cmake
+%cmake_build
+popd
+
+pushd unityx/windowck-plugin
+# Upstream patch to fix icons being blurry
+patch -i %{SOURCE2} -p1
+
+NOCONFIGURE=1 \
+./autogen.sh
+
+%configure --disable-static
+%make_build
+popd
+
+%install
+%cmake_install
+
+pushd unityx/plotinus
+%cmake_install
+popd
+
+pushd unityx/windowck-plugin
+%make_install
+rm -fv %{buildroot}%{_libdir}/*.la
+popd
+
+chrpath --delete %{buildroot}%{_libdir}/libunityx-core-6.0.so.9.0.0
+
+pushd %{buildroot}
+ln -s %{_libdir}/unity .%{_libdir}/unityx
+popd
+
+%find_lang unityx
+%find_lang xfce4-windowck-plugin
+
+%ldconfig_post
+
+%postun
+if [ ${1} -eq 0 ]; then
+ glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || :
+fi
+
+%posttrans
+glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || :
+
+%files -f unityx.lang
+%doc AUTHORS ChangeLog INSTALL README.md
+%license COPYING COPYING.LGPL
+%{_bindir}/unityx*
+%{_libdir}/unityx
+%{_libdir}/libunityx-core-6.0.so.*
+%{_datadir}/glib-2.0/schemas/org.unityd.UnityX.gschema.xml
+%{_datadir}/glib-2.0/schemas/org.unityd.UnityX.user-interface.gschema.xml
+%dir %{_datadir}/unityx
+%dir %{_datadir}/unityx/icons
+%{_datadir}/unityx/icons/dash-widgets.json
+%{_datadir}/unityx/icons/*.png
+%{_datadir}/unityx/icons/*.svg
+%{_datadir}/unityx/icons/searchingthedashlegalnotice.html
+%dir %{_datadir}/unityx/themes/
+%{_datadir}/unityx/themes/dash-widgets.json
+%{_datadir}/xsessions/unityx.desktop
+
+%files -n plotinus
+%doc unityx/plotinus/README.md
+%license COPYING COPYING.LGPL
+%{_bindir}/plotinus
+%{_libdir}/libplotinus.so
+%{_datadir}/glib-2.0/schemas/org.unityd.UnityX.plotinus.gschema.xml
+
+%files devel
+%dir %{_includedir}/UnityX-6.0/UnityCore/
+%{_includedir}/UnityX-6.0/UnityCore/*.h
+%{_libdir}/libunityx-core-6.0.so
+%{_libdir}/pkgconfig/unityx-core-6.0.pc
+
+%files xfce4-windowck-plugin -f xfce4-windowck-plugin.lang
+%doc unityx/windowck-plugin/AUTHORS unityx/windowck-plugin/NEWS unityx/windowck-plugin/README.md
+%license unityx/windowck-plugin/COPYING
+%{_libdir}/xfce4/panel/plugins/*.so
+%{_datadir}/icons/hicolor/48x48/apps/*.png
+%{_datadir}/themes/Windowck/
+%{_datadir}/themes/Windowck-dark/
+%{_datadir}/xfce4/panel/plugins/*.desktop
+
+%changelog
+%autochangelog
diff --git a/anda/fonts/iosevka-fusion/iosevka-fusion-fonts.spec b/anda/fonts/iosevka-fusion/iosevka-fusion-fonts.spec
index 7601525ffc..894bdda651 100644
--- a/anda/fonts/iosevka-fusion/iosevka-fusion-fonts.spec
+++ b/anda/fonts/iosevka-fusion/iosevka-fusion-fonts.spec
@@ -2,7 +2,7 @@
%global debug_package %{nil}
Name: iosevka-fusion-fonts
-Version: 19.0.1
+Version: 21.0.0
Release: 1%{?dist}
Summary: A custom font based on iosevka
diff --git a/anda/games/osu-lazer/osu-lazer.spec b/anda/games/osu-lazer/osu-lazer.spec
index ee3d4d82c7..9ae7ea712a 100644
--- a/anda/games/osu-lazer/osu-lazer.spec
+++ b/anda/games/osu-lazer/osu-lazer.spec
@@ -1,8 +1,8 @@
-%define osuresver 2023.202.0
+%define osuresver 2023.314.0
%global debug_package %{nil}
Name: osu-lazer
-Version: 2023.207.0
+Version: 2023.305.0
Release: 1%{?dist}
Summary: The future of osu! and the beginning of an open era! Commonly known by the codename osu!lazer. Pew pew.
ExclusiveArch: x86_64
diff --git a/anda/games/prismlauncher-nightly/prismlauncher-nightly.spec b/anda/games/prismlauncher-nightly/prismlauncher-nightly.spec
index 9ac774857b..85acb36f8e 100644
--- a/anda/games/prismlauncher-nightly/prismlauncher-nightly.spec
+++ b/anda/games/prismlauncher-nightly/prismlauncher-nightly.spec
@@ -1,6 +1,6 @@
%global real_name prismlauncher
-%global commit 8ce8055aeb3e610088ff5a08f509862c1feafd8f
+%global commit 45b0367d14f38d40af5cc8603f7daab05d83af5f
%global shortcommit %(c=%{commit}; echo ${c:0:7})
%global libnbtplusplus_commit 2203af7eeb48c45398139b583615134efd8d407f
%global quazip_commit 6117161af08e366c37499895b00ef62f93adc345
diff --git a/anda/games/prismlauncher-qt5-nightly/prismlauncher-qt5-nightly.spec b/anda/games/prismlauncher-qt5-nightly/prismlauncher-qt5-nightly.spec
index bdb4e917b0..d145693ac3 100644
--- a/anda/games/prismlauncher-qt5-nightly/prismlauncher-qt5-nightly.spec
+++ b/anda/games/prismlauncher-qt5-nightly/prismlauncher-qt5-nightly.spec
@@ -1,6 +1,6 @@
%global real_name prismlauncher
-%global commit 8ce8055aeb3e610088ff5a08f509862c1feafd8f
+%global commit 45b0367d14f38d40af5cc8603f7daab05d83af5f
%global shortcommit %(c=%{commit}; echo ${c:0:7})
%global libnbtplusplus_commit 2203af7eeb48c45398139b583615134efd8d407f
%global quazip_commit 6117161af08e366c37499895b00ef62f93adc345
diff --git a/anda/groovy/groovy-docs/groovy-docs.spec b/anda/groovy/groovy-docs/groovy-docs.spec
index a0c29cf37d..cdf63f56d9 100644
--- a/anda/groovy/groovy-docs/groovy-docs.spec
+++ b/anda/groovy/groovy-docs/groovy-docs.spec
@@ -1,5 +1,5 @@
Name: groovy-docs
-Version: 4.0.9
+Version: 4.0.10
Release: 1%{?dist}
Summary: Documentation for the Groovy programming language
URL: https://groovy-lang.org/
diff --git a/anda/groovy/groovy.spec b/anda/groovy/groovy.spec
index 98def73e1e..6773bcfc51 100644
--- a/anda/groovy/groovy.spec
+++ b/anda/groovy/groovy.spec
@@ -1,5 +1,5 @@
Name: groovy
-Version: 4.0.9
+Version: 4.0.10
Release: 1%{?dist}
Summary: A multi-faceted language for the Java platform
BuildArch: noarch
diff --git a/anda/lib/cmake-extras/anda.hcl b/anda/lib/cmake-extras/anda.hcl
new file mode 100644
index 0000000000..1aa9235605
--- /dev/null
+++ b/anda/lib/cmake-extras/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "cmake-extras.spec"
+ }
+}
diff --git a/anda/lib/cmake-extras/cmake-extras.spec b/anda/lib/cmake-extras/cmake-extras.spec
new file mode 100644
index 0000000000..b8ac58185f
--- /dev/null
+++ b/anda/lib/cmake-extras/cmake-extras.spec
@@ -0,0 +1,73 @@
+%global forgeurl https://gitlab.com/ubports/development/core/lomiri-api
+%global commit 99aab4514ee182cb7a94821b4b51e4d8cb9a82ef
+%forgemeta
+
+Name: cmake-extras
+Version: 1.6
+Release: 1%{?dist}
+Summary: A collection of add-ons for the CMake build tool
+License: GPLv3
+URL: https://gitlab.com/ubports/development/core/cmake-extras
+Source0: %{url}/-/archive/%commit/cmake-extras-%commit.tar.gz
+BuildArch: noarch
+
+BuildRequires: cmake
+BuildRequires: gcc-c++
+Requires: gcovr
+Requires: gmock-devel
+Requires: intltool
+Requires: gettext
+Requires: lcov
+Requires: qt5-qtdeclarative-devel
+
+%description
+A collection of add-ons for the CMake build tool used to build lomiri and other applications.
+
+%prep
+%autosetup -n cmake-extras-%commit
+sed -i 's/#!\/bin\/sh/#!\/usr\/bin\/sh/' src/FormatCode/formatcode.in
+sed -i 's/#!\/bin\/sh/#!\/usr\/bin\/sh/' src/CopyrightTest/check_copyright.sh
+sed -i 's/python/python3/' src/IncludeChecker/include_checker.py
+sed -i 'sX/usr/lib/qt5X${CMAKE_LIBDIR}/qt5X' src/QmlPlugins/QmlPluginsConfig.cmake
+
+%build
+%cmake
+%cmake_build
+
+%install
+%cmake_install
+# Correct this as we actually don't have a gmock source dir
+#rm {buildroot}/usr/share/cmake/GMock/GMockConfig.cmake
+#cp {SOURCE1} {buildroot}/usr/share/cmake/GMock/
+
+%files
+%license LICENSE
+%{_datadir}/cmake/CopyrightTest/CopyrightTestConfig.cmake
+%{_datadir}/cmake/CopyrightTest/check_copyright.sh
+%{_datadir}/cmake/CoverageReport/CoverageReportConfig.cmake
+%{_datadir}/cmake/CoverageReport/EnableCoverageReport.cmake
+%{_datadir}/cmake/DoxygenBuilder/Doxyfile.in
+%{_datadir}/cmake/DoxygenBuilder/DoxygenBuilderConfig.cmake
+%{_datadir}/cmake/GDbus/GDbusConfig.cmake
+%{_datadir}/cmake/GMock/GMockConfig.cmake
+%{_datadir}/cmake/GSettings/GSettingsConfig.cmake
+%{_datadir}/cmake/Intltool/IntltoolConfig.cmake
+%{_datadir}/cmake/Lcov/LcovConfig.cmake
+%{_datadir}/cmake/QmlPlugins/QmlPluginsConfig.cmake
+%{_datadir}/cmake/FormatCode/unity-api.clang-format
+%{_datadir}/cmake/FormatCode/formatcode.in
+%{_datadir}/cmake/FormatCode/formatcode_format.cmake.in
+%{_datadir}/cmake/FormatCode/unity-api.astyle
+%{_datadir}/cmake/FormatCode/formatcode_test.cmake.in
+%{_datadir}/cmake/FormatCode/FormatCodeConfig.cmake
+%{_datadir}/cmake/FormatCode/formatcode_common.cmake
+%{_datadir}/cmake/gcovr/gcovrConfig.cmake
+%{_datadir}/cmake/IncludeChecker/IncludeCheckerConfig.cmake
+%{_datadir}/cmake/IncludeChecker/deps
+%{_datadir}/cmake/IncludeChecker/include_checker.py
+%{_datadir}/cmake/GObjectIntrospection/GObjectIntrospectionConfig.cmake
+%{_datadir}/cmake/GdbusCodegen/GdbusCodegenConfig.cmake
+%{_datadir}/cmake/Vala/ValaConfig.cmake
+
+%changelog
+%autochangelog
diff --git a/anda/lib/cmake-extras/update.rhai b/anda/lib/cmake-extras/update.rhai
new file mode 100644
index 0000000000..f4ac61854e
--- /dev/null
+++ b/anda/lib/cmake-extras/update.rhai
@@ -0,0 +1,3 @@
+let txt = get("https://gitlab.com/api/v4/projects/17117115/repository/tags");
+let ver = txt.json_arr()[0].name;
+rpm.version(ver);
diff --git a/anda/lib/dbus-test-runner/anda.hcl b/anda/lib/dbus-test-runner/anda.hcl
new file mode 100644
index 0000000000..c39c61a852
--- /dev/null
+++ b/anda/lib/dbus-test-runner/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "dbus-test-runner.spec"
+ }
+}
diff --git a/anda/lib/dbus-test-runner/dbus-test-runner.spec b/anda/lib/dbus-test-runner/dbus-test-runner.spec
new file mode 100644
index 0000000000..7cd36542b9
--- /dev/null
+++ b/anda/lib/dbus-test-runner/dbus-test-runner.spec
@@ -0,0 +1,74 @@
+Name: dbus-test-runner
+Version: 19.04.0
+Release: %autorelease
+Summary: A small utility to run executables under a new DBus session for testing
+License: GPLv3
+URL: https://launchpad.net/dbus-test-runner
+Source0: %{url}/19.04/%{version}/+download/dbus-test-runner-%{version}.tar.gz
+Source1: https://salsa.debian.org/debian/dbus-test-runner/-/raw/debian/sid/debian/man/dbus-test-runner.1
+Source2: https://salsa.debian.org/debian/dbus-test-runner/-/archive/debian/sid/dbus-test-runner-debian-sid.tar.gz
+
+BuildRequires: automake libtool mate-common
+BuildRequires: pkgconfig
+BuildRequires: make
+BuildRequires: g++
+BuildRequires: gcc
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(gio-2.0)
+BuildRequires: pkgconfig(gio-unix-2.0)
+BuildRequires: pkgconfig(dbus-glib-1)
+
+%description
+A small little utility to run a couple of executables under a new DBus session for testing.
+
+%package devel
+Summary: dbus-test-runner development files
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description devel
+Development files and headers for dbus-test-runner.
+
+%prep
+%autosetup -n dbus-test-runner-%{version}
+
+# Apply patch fixes from Debian
+tar -xf '%{SOURCE2}'
+for i in dbus-test-runner-debian-sid/debian/patches/*.patch; do patch -p1 < $i; done
+
+%build
+NOCONFIGURE=1 autoreconf -fi
+
+%configure
+%make_build
+
+%install
+%make_install
+
+# Don't package static files
+rm -rf %{buildroot}%{_libdir}/libdbustest.a
+
+# Install manpage
+install -dm755 %{buildroot}%{_mandir}/man1/
+install -Dm644 %{SOURCE1} %{buildroot}%{_mandir}/man1/
+
+%files
+%license COPYING
+%{_libdir}/libdbustest.so.*
+%dir %{_libexecdir}/dbus-test-runner
+%{_libexecdir}/dbus-test-runner/dbus-test-watchdog
+%{_bindir}/dbus-test-runner
+%{_mandir}/man1/dbus-test-runner.1.gz
+%dir %{_datadir}/dbus-test-runner
+%{_datadir}/dbus-test-runner/*.conf
+%{_datadir}/dbus-test-runner/dbus-test-bustle-handler
+
+%files devel
+%license COPYING
+%dir %{_includedir}/libdbustest-1
+%dir %{_includedir}/libdbustest-1/libdbustest
+%{_includedir}/libdbustest-1/libdbustest/*.h
+%{_libdir}/libdbustest.so
+%{_libdir}/pkgconfig/dbustest-1.pc
+
+%changelog
+%autochangelog
diff --git a/anda/lib/libhelium/libhelium.spec b/anda/lib/libhelium/libhelium.spec
index 46c6927a36..3cebe53489 100644
--- a/anda/lib/libhelium/libhelium.spec
+++ b/anda/lib/libhelium/libhelium.spec
@@ -1,6 +1,6 @@
Summary: The Application Framework for tauOS apps
Name: libhelium
-Version: 1.4.6
+Version: 1.4.10
Release: 1%{?dist}
License: GPLv3
URL: https://github.com/tau-OS/libhelium
diff --git a/anda/lib/libindicator/libindicator.spec b/anda/lib/libindicator/libindicator.spec
index 91133079c1..9c11653cb9 100644
--- a/anda/lib/libindicator/libindicator.spec
+++ b/anda/lib/libindicator/libindicator.spec
@@ -6,6 +6,7 @@ Summary: Shared functions for Ayatana indicators
License: GPLv3
URL: https://launchpad.net/libindicator
Source0: http://archive.ubuntu.com/ubuntu/pool/universe/libi/libindicator/libindicator_16.10.0+18.04.20180321.1.orig.tar.gz
+Source1: https://raw.githubusercontent.com/ubports/libindicator/097906132ffb479205be15a92cae97e5daf4e154/data/indicators.target
# From GLib 2.62
Patch1: http://archive.ubuntu.com/ubuntu/pool/universe/libi/libindicator/libindicator_16.10.0+18.04.20180321.1-0ubuntu5.diff.gz
@@ -135,6 +136,9 @@ popd
# Remove libtool files
find %{buildroot} -type f -name '*.la' -delete
+# Lomiri compatability
+install -Dm644 %{SOURCE1} %{buildroot}%{_userunitdir}/
+
%ldconfig_scriptlets
%ldconfig_scriptlets gtk3
@@ -146,6 +150,7 @@ find %{buildroot} -type f -name '*.la' -delete
%dir %{_datadir}/libindicator/
%dir %{_datadir}/libindicator/icons/
%{_userunitdir}/indicators-pre.target
+%{_userunitdir}/indicators.target
%files devel
%dir %{_includedir}/libindicator-0.4/
diff --git a/anda/lib/lomiri-api/anda.hcl b/anda/lib/lomiri-api/anda.hcl
new file mode 100644
index 0000000000..79c67d48eb
--- /dev/null
+++ b/anda/lib/lomiri-api/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "lomiri-api.spec"
+ }
+}
diff --git a/anda/lib/lomiri-api/lomiri-api.spec b/anda/lib/lomiri-api/lomiri-api.spec
new file mode 100644
index 0000000000..0375bcede3
--- /dev/null
+++ b/anda/lib/lomiri-api/lomiri-api.spec
@@ -0,0 +1,80 @@
+%global forgeurl https://gitlab.com/ubports/development/core/lomiri-api
+%global commit 30860779881a2a235ba454ac37a06e349af05eb3
+%forgemeta
+
+Name: lomiri-api
+Version: 0.2.0
+Release: 1%{?dist}
+Summary: API for Lomiri
+
+License: LGPLv3+
+URL: https://gitlab.com/ubports/development/core/lomiri-api
+Source0: %{url}/-/archive/%commit/lomiri-api-%commit.tar.gz
+
+BuildRequires: cmake
+BuildRequires: pkgconfig
+BuildRequires: g++
+BuildRequires: gcc
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(Qt5Core)
+BuildRequires: pkgconfig(Qt5Quick)
+BuildRequires: cppcheck
+BuildRequires: doxygen
+
+%description
+API to interface with the Lomiri desktop environment.
+
+%package devel
+Summary: API library for Lomiri
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description devel
+This package contains development files needed for Lomiri API.
+
+%package doc
+Summary: Documenation for %{name}
+BuildArch: noarch
+
+%description doc
+The %{name}-doc contains documentation for %{name}.
+
+%prep
+%autosetup -n lomiri-api-%commit
+
+%build
+# Requires static file that Fedora doesn't package
+sed -i 's/add_subdirectory(gtest)//' test/CMakeLists.txt
+# Hard-coded for Debians libdir
+sed -i 's?lib/${CMAKE_LIBRARY_ARCHITECTURE}?%{_lib}?' CMakeLists.txt
+%cmake -DCMAKE_INSTALL_LIBDIR=%{_lib}
+%cmake_build
+
+%install
+%cmake_install
+
+%files
+%license COPYING
+%{_libdir}/liblomiri-api.so.*
+
+%files devel
+%{_libdir}/liblomiri-api.so
+%{_libdir}/pkgconfig/*.pc
+%dir %{_includedir}/lomiri
+%{_includedir}/lomiri/*.h
+%dir %{_includedir}/lomiri/api
+%{_includedir}/lomiri/api/*.h
+%dir %{_includedir}/lomiri/shell
+%dir %{_includedir}/lomiri/shell/application
+%{_includedir}/lomiri/shell/application/*.h
+%dir %{_includedir}/lomiri/shell/launcher
+%{_includedir}/lomiri/shell/launcher/*.h
+%dir %{_includedir}/lomiri/shell/notifications
+%{_includedir}/lomiri/shell/notifications/*.h
+%dir %{_includedir}/lomiri/util
+%{_includedir}/lomiri/util/*.h
+
+%files doc
+%{_docdir}/liblomiri-api/
+
+%changelog
+%autochangelog
diff --git a/anda/lib/lomiri-api/update.rhai b/anda/lib/lomiri-api/update.rhai
new file mode 100644
index 0000000000..17760a3bba
--- /dev/null
+++ b/anda/lib/lomiri-api/update.rhai
@@ -0,0 +1,3 @@
+let txt = get("https://gitlab.com/api/v4/projects/17117186/repository/tags");
+let ver = txt.json_arr()[0].name;
+rpm.version(ver);
diff --git a/anda/lib/nux/nux.spec b/anda/lib/nux/nux.spec
index c8f75d053d..128fb888dc 100644
--- a/anda/lib/nux/nux.spec
+++ b/anda/lib/nux/nux.spec
@@ -38,6 +38,7 @@ BuildRequires: pciutils-devel
BuildRequires: glib2-devel
BuildRequires: ibus-devel
BuildRequires: boost-devel
+BuildRequires: geis-devel
BuildRequires: glewmx-devel
BuildRequires: pkgconfig(pango)
BuildRequires: pkgconfig(pangocairo)
diff --git a/anda/lib/properties-cpp-devel/anda.hcl b/anda/lib/properties-cpp-devel/anda.hcl
new file mode 100644
index 0000000000..c2fdf27721
--- /dev/null
+++ b/anda/lib/properties-cpp-devel/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "properties-cpp-devel.spec"
+ }
+}
diff --git a/anda/lib/properties-cpp-devel/properties-cpp-devel.spec b/anda/lib/properties-cpp-devel/properties-cpp-devel.spec
new file mode 100644
index 0000000000..c3c645e5f3
--- /dev/null
+++ b/anda/lib/properties-cpp-devel/properties-cpp-devel.spec
@@ -0,0 +1,61 @@
+%global forgeurl https://gitlab.com/ubports/development/core/lib-cpp/properties-cpp
+%global commit 7dd9ec00d061d822d259c7477cb12f79d0e1eadd
+%forgemeta
+%define debug_package %{nil}
+
+Name: properties-cpp-devel
+Version: 0.0.2
+Release: %autorelease
+Summary: A very simple convenience library for handling properties and signals in C++11
+
+License: LGPLv3
+URL: https://gitlab.com/ubports/development/core/lib-cpp/properties-cpp
+Source0: %{url}/-/archive/%commit/properties-cpp-%commit.tar.gz
+
+BuildRequires: cmake
+BuildRequires: pkgconfig
+BuildRequires: g++
+BuildRequires: gcc
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: doxygen
+BuildRequires: cmake-extras
+
+%description
+A very simple convenience library for handling properties and signals in C++11.
+
+%package doc
+Summary: properties-cpp documentation files
+BuildArch: noarch
+
+%description doc
+This package contains documentation files for properties-cpp-devel.
+
+%prep
+%autosetup -n properties-cpp-%commit
+
+%build
+%cmake
+
+%cmake_build
+
+%install
+%cmake_install
+
+%files
+%license COPYING
+%{_libdir}/pkgconfig/properties-cpp.pc
+%{_includedir}/core/*.h
+
+%files doc
+%dir %{_docdir}/properties-cpp
+%dir %{_docdir}/properties-cpp/html
+%{_docdir}/properties-cpp/html/*.html
+%{_docdir}/properties-cpp/html/*.map
+%{_docdir}/properties-cpp/html/*.css
+%{_docdir}/properties-cpp/html/*.png
+%{_docdir}/properties-cpp/html/*.js
+%{_docdir}/properties-cpp/html/*.md5
+%{_docdir}/properties-cpp/html/*.svg
+
+%changelog
+%autochangelog
diff --git a/anda/lib/qt5-pim/anda.hcl b/anda/lib/qt5-pim/anda.hcl
new file mode 100644
index 0000000000..60ca4a2ce2
--- /dev/null
+++ b/anda/lib/qt5-pim/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "qt5-pim.spec"
+ }
+}
diff --git a/anda/lib/qt5-pim/qt5-pim.spec b/anda/lib/qt5-pim/qt5-pim.spec
new file mode 100644
index 0000000000..b8b5f5b5e7
--- /dev/null
+++ b/anda/lib/qt5-pim/qt5-pim.spec
@@ -0,0 +1,174 @@
+Name: qt5-pim
+Summary: Qt5 PIM Framework
+Version: 5.15
+Release: %autorelease
+
+License: GPLv3
+URL: https://invent.kde.org/qt/qt/qtpim
+Source0: %{url}/-/archive/kde/5.15/qtpim-kde-%{version}.tar.gz
+Source1: https://salsa.debian.org/qt-kde-team/qt/qtpim/-/archive/master/qtpim-master.tar.gz
+
+BuildRequires: make
+BuildRequires: gcc-c++
+BuildRequires: qt5-qtbase-devel
+BuildRequires: qt5-qtbase-private-devel
+BuildRequires: qt5-qtdeclarative-devel
+BuildRequires: pkgconfig(QtCore)
+BuildRequires: perl
+BuildRequires: qt5-doctools
+BuildRequires: qt5-rpm-macros
+
+Provides: %{name}-bearer = %{version}-%{release}
+Provides: %{name}-connectivity = %{version}-%{release}
+Provides: %{name}-contacts = %{version}-%{release}
+Provides: %{name}-feedback = %{version}-%{release}
+Provides: %{name}-gallery = %{version}-%{release}
+Provides: %{name}-location = %{version}-%{release}
+Provides: %{name}-multimediakit = %{version}-%{release}
+Provides: %{name}-organizer = %{version}-%{release}
+Provides: %{name}-publishsubscribe = %{version}-%{release}
+Provides: %{name}-sensors = %{version}-%{release}
+Provides: %{name}-serviceframework = %{version}-%{release}
+Provides: %{name}-systeminfo = %{version}-%{release}
+Provides: %{name}-versit = %{version}-%{release}
+
+%description
+Qt Mobility Project delivers a set of new APIs to Qt with features that are well
+known from the mobile device world, in particular phones. However, these APIs
+allow the developer to use these features with ease from one framework and apply
+them to phones, netbooks and non-mobile personal computers. The framework not
+only improves many aspects of a mobile experience, because it improves the use
+of these technologies, but has applicability beyond the mobile device arena.
+
+%package devel
+Summary: Qt Mobility Framework development files
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: qt5-qtbase-devel
+Provides: %{name}-bearer-devel = %{version}-%{release}
+Provides: %{name}-connectivity-devel = %{version}-%{release}
+Provides: %{name}-contacts-devel = %{version}-%{release}
+Provides: %{name}-feedback-devel = %{version}-%{release}
+Provides: %{name}-gallery-devel = %{version}-%{release}
+Provides: %{name}-location-devel = %{version}-%{release}
+Provides: %{name}-multimediakit-devel = %{version}-%{release}
+Provides: %{name}-organizer-devel = %{version}-%{release}
+Provides: %{name}-publishsubscribe-devel = %{version}-%{release}
+Provides: %{name}-sensors-devel = %{version}-%{release}
+Provides: %{name}-serviceframework-devel = %{version}-%{release}
+Provides: %{name}-systeminfo-devel = %{version}-%{release}
+Provides: %{name}-versit-devel = %{version}-%{release}
+%description devel
+%{summary}.
+
+%package doc
+Summary: API documentation for %{name}
+BuildArch: noarch
+%description doc
+%{summary}.
+
+%package examples
+Summary: Example files for %{name}
+Requires: %{name}-devel
+%description examples
+%{summary}.
+
+%prep
+%autosetup -n qtpim-kde-%{version}
+tar -xf '%{SOURCE1}'
+for i in qtpim-master/debian/patches/*.patch; do patch -p1 < $i; done
+
+%build
+PATH=%{_qt5_bindir}:$PATH; export PATH
+# Build headers manually
+cd src/contacts/ && perl /usr/bin/syncqt.pl -copy -module QtContacts -version 5.4.0 -outdir ../../redhat-linux-build -builddir ./ ./
+cd ../
+cd organizer/ && perl /usr/bin/syncqt.pl -copy -module QtOrganizer -version 5.4.0 -outdir ../../redhat-linux-build -builddir ./ ./
+cd ../
+cd versit/ && perl /usr/bin/syncqt.pl -copy -module QtVersit -version 5.4.0 -outdir ../../redhat-linux-build -builddir ./ ./
+cd ../
+cd versitorganizer/ && perl /usr/bin/syncqt.pl -copy -module QtVersitOrganizer -version 5.4.0 -outdir ../../redhat-linux-build -builddir ./ ./
+cd ../../
+
+# For building
+cd ./redhat-linux-build/include/QtContacts
+ln -s 5.4.0/QtContacts/private
+cd ../QtOrganizer
+ln -s 5.4.0/QtOrganizer/private
+cd ../QtVersit
+ln -s 5.4.0/QtVersit/private
+cd ../QtVersitOrganizer
+ln -s 5.4.0/QtVersitOrganizer/private
+cd ../../../
+
+cd ./redhat-linux-build
+qmake-qt5 ..
+
+%make_build
+%make_build docs
+
+%install
+cd ./redhat-linux-build
+%make_install INSTALL_ROOT=%{buildroot}
+
+# manually install docs
+mkdir -p %{buildroot}%{_qt5_docdir}/html/ %{buildroot}%{_qt5_docdir}/qch/
+mv doc/*.qch %{buildroot}%{_qt5_docdir}/qch/
+cp -a doc/* %{buildroot}%{_qt5_docdir}/html/
+
+%files
+%license LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT
+%{_libdir}/libQt5Contacts.so.*
+%{_libdir}/libQt5Organizer.so.*
+%{_libdir}/libQt5Versit.so.*
+%{_libdir}/libQt5VersitOrganizer.so.*
+%dir %{_qt5_qmldir}/QtContacts
+%{_qt5_qmldir}/QtContacts/*.so
+%{_qt5_qmldir}/QtContacts/qmldir
+%{_qt5_qmldir}/QtContacts/*.qmltypes
+%dir %{_qt5_qmldir}/QtOrganizer
+%{_qt5_qmldir}/QtOrganizer/*.so
+%{_qt5_qmldir}/QtOrganizer/qmldir
+%{_qt5_qmldir}/QtOrganizer/*.qmltypes
+%dir %{_qt5_plugindir}/contacts
+%{_qt5_plugindir}/contacts/*.so
+%dir %{_qt5_plugindir}/organizer
+%{_qt5_plugindir}/organizer/*.so
+%dir %{_qt5_plugindir}/versit
+%{_qt5_plugindir}/versit/*.so
+
+%files devel
+%license LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT
+%{_libdir}/*.prl
+%{_libdir}/libQt5Contacts.so
+%{_libdir}/libQt5Organizer.so
+%{_libdir}/libQt5Versit.so
+%{_libdir}/libQt5VersitOrganizer.so
+%{_libdir}/pkgconfig/*.pc
+%dir %{_libdir}/cmake/Qt5Contacts
+%{_libdir}/cmake/Qt5Contacts/*.cmake
+%dir %{_libdir}/cmake/Qt5Organizer
+%{_libdir}/cmake/Qt5Organizer/*.cmake
+%dir %{_libdir}/cmake/Qt5Versit
+%{_libdir}/cmake/Qt5Versit/*.cmake
+%dir %{_libdir}/cmake/Qt5VersitOrganizer
+%{_libdir}/cmake/Qt5VersitOrganizer/*.cmake
+%{_qt5_archdatadir}/mkspecs/modules/*.pri
+%{_qt5_includedir}/QtContacts/
+%{_qt5_includedir}/QtOrganizer/
+%{_qt5_includedir}/QtVersit/
+%{_qt5_includedir}/QtVersitOrganizer/
+
+%files doc
+%license LICENSE.FDL
+%{_qt5_docdir}/qch/*.qch
+%{_qt5_docdir}/html/qtcontacts/
+%{_qt5_docdir}/html/qtorganizer/
+%{_qt5_docdir}/html/qtversit/
+
+%files examples
+%dir %{_qt5_examplesdir}/contacts
+%{_qt5_examplesdir}/contacts/*.pro
+%{_qt5_examplesdir}/organizer/
+
+%changelog
+%autochangelog
diff --git a/anda/lib/qt5-qtdbustest/anda.hcl b/anda/lib/qt5-qtdbustest/anda.hcl
new file mode 100644
index 0000000000..0bf4b47d68
--- /dev/null
+++ b/anda/lib/qt5-qtdbustest/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "qt5-qtdbustest.spec"
+ }
+}
diff --git a/anda/lib/qt5-qtdbustest/qt5-qtdbustest.spec b/anda/lib/qt5-qtdbustest/qt5-qtdbustest.spec
new file mode 100644
index 0000000000..a1b9a919cc
--- /dev/null
+++ b/anda/lib/qt5-qtdbustest/qt5-qtdbustest.spec
@@ -0,0 +1,62 @@
+Name: qt5-qtdbustest
+Version: 0.2+bzr42
+Release: %autorelease
+Summary: Library for testing DBus interactions using Qt5
+License: LGPLv3
+URL: https://launchpad.net/libqtdbustest
+Source0: http://deb.debian.org/debian/pool/main/libq/libqtdbustest/libqtdbustest_0.2+bzr42+repack1.orig.tar.xz
+Source1: https://salsa.debian.org/debian-ayatana-team/libqtdbustest/-/archive/master/libqtdbustest-master.tar.gz
+
+BuildRequires: cmake
+BuildRequires: cmake-extras
+BuildRequires: gcc-c++
+BuildRequires: gcovr
+BuildRequires: lcov
+BuildRequires: qt5-qtbase-devel
+BuildRequires: pkgconfig(gmock)
+BuildRequires: pkgconfig(gtest)
+
+%description
+A simple library for testing Qt based DBus services and clients.
+This package contains the shared libraries.
+
+%package devel
+Summary: Development files for %{name}
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description devel
+%{name}-devel package contains libraries and header files for
+developing applications that use %{name}.
+
+%prep
+%autosetup -n libqtdbustest-%{version}
+# Apply fixes
+tar -xf '%{SOURCE1}'
+for i in $(cat libqtdbustest-master/debian/patches/series); do patch -p1 < libqtdbustest-master/debian/patches/$i; done
+
+%build
+%cmake
+%cmake_build
+
+%install
+%cmake_install
+
+%files
+%license COPYING
+%{_bindir}/qdbus-simple-test-runner
+%{_libdir}/libqtdbustest.so.*
+%dir %{_libexecdir}/libqtdbustest
+%{_libexecdir}/libqtdbustest/watchdog
+%dir %{_datadir}/libqtdbustest
+%{_datadir}/libqtdbustest/*.conf
+
+%files devel
+%license COPYING
+%dir %{_includedir}/libqtdbustest-1
+%dir %{_includedir}/libqtdbustest-1/libqtdbustest
+%{_includedir}/libqtdbustest-1/libqtdbustest/*.h
+%{_libdir}/libqtdbustest.so
+%{_libdir}/pkgconfig/libqtdbustest-1.pc
+
+%changelog
+%autochangelog
diff --git a/anda/lib/qt5-qtsystems/anda.hcl b/anda/lib/qt5-qtsystems/anda.hcl
new file mode 100644
index 0000000000..b2ff7d6ec5
--- /dev/null
+++ b/anda/lib/qt5-qtsystems/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "qt5-qtsystems.spec"
+ }
+}
diff --git a/anda/lib/qt5-qtsystems/qt5-qtsystems.spec b/anda/lib/qt5-qtsystems/qt5-qtsystems.spec
new file mode 100644
index 0000000000..e90ec3ce34
--- /dev/null
+++ b/anda/lib/qt5-qtsystems/qt5-qtsystems.spec
@@ -0,0 +1,186 @@
+# forgemeta does not work
+%global commit e3332ee38d27a134cef6621fdaf36687af1b6f4a
+
+Name: qt5-qtsystems
+Summary: Qt5 Mobility Framework
+Version: 5.15
+Release: %autorelease
+
+License: GPLv3
+URL: https://invent.kde.org/qt/qt/qtsystems
+Source0: %{url}/-/archive/%commit/qt5-mobility-%commit.tar.gz
+Source1: https://salsa.debian.org/qt-kde-team/qt/qtsystems/-/archive/master/qtsystems-master.tar.gz
+
+BuildRequires: make
+BuildRequires: gcc-c++
+BuildRequires: pkgconfig(alsa)
+BuildRequires: pkgconfig(blkid)
+BuildRequires: pkgconfig(bluez)
+BuildRequires: pkgconfig(libnm)
+BuildRequires: pkgconfig(libpulse)
+BuildRequires: pkgconfig(libudev)
+BuildRequires: pkgconfig(QtCore)
+BuildRequires: pkgconfig(QtDeclarative)
+BuildRequires: pkgconfig(QtGui) pkgconfig(QtOpenGL)
+BuildRequires: pkgconfig(QtNetwork) >= 4.7
+BuildRequires: pkgconfig(xv)
+BuildRequires: pkgconfig(QtDBus)
+BuildRequires: qt5-doctools
+BuildRequires: qt5-qtdeclarative-devel
+BuildRequires: qt5-rpm-macros
+BuildRequires: qt5-qtbase-private-devel
+BuildRequires: qt5-qtbase
+
+Provides: %{name}-bearer = %{version}-%{release}
+Provides: %{name}-connectivity = %{version}-%{release}
+Provides: %{name}-contacts = %{version}-%{release}
+Provides: %{name}-feedback = %{version}-%{release}
+Provides: %{name}-gallery = %{version}-%{release}
+Provides: %{name}-location = %{version}-%{release}
+Provides: %{name}-multimediakit = %{version}-%{release}
+Provides: %{name}-organizer = %{version}-%{release}
+Provides: %{name}-publishsubscribe = %{version}-%{release}
+Provides: %{name}-sensors = %{version}-%{release}
+Provides: %{name}-serviceframework = %{version}-%{release}
+Provides: %{name}-systeminfo = %{version}-%{release}
+Provides: %{name}-versit = %{version}-%{release}
+
+%description
+Qt5 Mobility Project delivers a set of new APIs to Qt with features that are well
+known from the mobile device world, in particular phones. However, these APIs
+allow the developer to use these features with ease from one framework and apply
+them to phones, netbooks and non-mobile personal computers. The framework not
+only improves many aspects of a mobile experience, because it improves the use
+of these technologies, but has applicability beyond the mobile device arena.
+
+%package devel
+Summary: Qt5 Mobility Framework development files
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: qt5-qtbase-devel
+Provides: %{name}-bearer-devel = %{version}-%{release}
+Provides: %{name}-connectivity-devel = %{version}-%{release}
+Provides: %{name}-contacts-devel = %{version}-%{release}
+Provides: %{name}-feedback-devel = %{version}-%{release}
+Provides: %{name}-gallery-devel = %{version}-%{release}
+Provides: %{name}-location-devel = %{version}-%{release}
+Provides: %{name}-multimediakit-devel = %{version}-%{release}
+Provides: %{name}-organizer-devel = %{version}-%{release}
+Provides: %{name}-publishsubscribe-devel = %{version}-%{release}
+Provides: %{name}-sensors-devel = %{version}-%{release}
+Provides: %{name}-serviceframework-devel = %{version}-%{release}
+Provides: %{name}-systeminfo-devel = %{version}-%{release}
+Provides: %{name}-versit-devel = %{version}-%{release}
+%description devel
+%{summary}.
+
+%package doc
+Summary: API documentation for %{name}
+BuildArch: noarch
+%description doc
+%{summary}.
+
+%package examples
+Summary: Example files for %{name}
+Requires: %{name}-devel
+%description examples
+%{summary}.
+
+%prep
+%autosetup -n qtsystems-%commit
+tar -xf '%{SOURCE1}'
+for i in qtsystems-master/debian/patches/*.patch; do patch -p1 < $i; done
+
+%build
+# Build headers manually
+cd src/systeminfo/ && perl /usr/bin/syncqt.pl -copy -module QtSystemInfo -version 5.4.0 -outdir ../../redhat-linux-build -builddir ./ ./
+cd ../
+cd publishsubscribe/ && perl /usr/bin/syncqt.pl -copy -module QtPublishSubscribe -version 5.4.0 -outdir ../../redhat-linux-build -builddir ./ ./
+cd ../
+cd serviceframework/ && perl /usr/bin/syncqt.pl -copy -module QtServiceFramework -version 5.4.0 -outdir ../../redhat-linux-build -builddir ./ ./
+cd ../../
+
+# For building
+cd ./redhat-linux-build/include/QtPublishSubscribe
+ln -s 5.4.0/QtPublishSubscribe/private
+cd ../QtServiceFramework
+ln -s 5.4.0/QtServiceFramework/private
+cd ../QtSystemInfo
+ln -s 5.4.0/QtSystemInfo/private
+cd ../../../
+
+cd ./redhat-linux-build
+%qmake_qt5 ..
+
+%make_build
+%make_build docs
+
+%install
+cd ./redhat-linux-build
+%make_install INSTALL_ROOT=%{buildroot}
+
+# manually install docs
+mkdir -p %{buildroot}%{_qt5_docdir}/html/ %{buildroot}%{_qt5_docdir}/qch/
+mv doc/*.qch %{buildroot}%{_qt5_docdir}/qch/
+cp -a doc/* %{buildroot}%{_qt5_docdir}/html/
+
+# Is not needed/out of source
+rm -f %{buildroot}%{_qt5_examplesdir}/examples.pro
+
+# manually install headers
+cp -a ./include/* %{buildroot}%{_qt5_includedir}
+
+%files
+%license LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT
+%{_libdir}/libQt5PublishSubscribe.so.*
+%{_libdir}/libQt5ServiceFramework.so.*
+%{_libdir}/libQt5SystemInfo.so.*
+%{_qt5_bindir}/servicefw
+%{_qt5_bindir}/sfwlisten
+%dir %{_qt5_qmldir}/QtPublishSubscribe
+%{_qt5_qmldir}/QtPublishSubscribe/*.so
+%{_qt5_qmldir}/QtPublishSubscribe/qmldir
+%{_qt5_qmldir}/QtPublishSubscribe/*.qmltypes
+%dir %{_qt5_qmldir}/QtServiceFramework
+%{_qt5_qmldir}/QtServiceFramework/*.so
+%{_qt5_qmldir}/QtServiceFramework/qmldir
+%{_qt5_qmldir}/QtServiceFramework/*.qmltypes
+%dir %{_qt5_qmldir}/QtSystemInfo
+%{_qt5_qmldir}/QtSystemInfo/*.so
+%{_qt5_qmldir}/QtSystemInfo/qmldir
+%{_qt5_qmldir}/QtSystemInfo/*.qmltypes
+
+%files devel
+%license LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT
+%{_libdir}/*.prl
+%{_libdir}/libQt5PublishSubscribe.so
+%{_libdir}/libQt5ServiceFramework.so
+%{_libdir}/libQt5SystemInfo.so
+%{_libdir}/pkgconfig/*.pc
+%dir %{_libdir}/cmake/Qt5PublishSubscribe
+%{_libdir}/cmake/Qt5PublishSubscribe/*.cmake
+%dir %{_libdir}/cmake/Qt5ServiceFramework
+%{_libdir}/cmake/Qt5ServiceFramework/*.cmake
+%dir %{_libdir}/cmake/Qt5SystemInfo
+%{_libdir}/cmake/Qt5SystemInfo/*.cmake
+%{_qt5_archdatadir}/mkspecs/modules/*.pri
+%{_qt5_includedir}/QtPublishSubscribe/
+%{_qt5_includedir}/QtServiceFramework/
+%{_qt5_includedir}/QtSystemInfo/
+
+%files doc
+%license LICENSE.FDL
+%{_qt5_docdir}/qch/*.qch
+%{_qt5_docdir}/html/qtpublishsubscribe/
+%{_qt5_docdir}/html/qtserviceframework/
+%{_qt5_docdir}/html/qtsysteminfo/
+
+%files examples
+%dir %{_qt5_examplesdir}/systeminfo
+%{_qt5_examplesdir}/systeminfo/*.pro
+%{_qt5_examplesdir}/systeminfo/inputinfo/
+%{_qt5_examplesdir}/systeminfo/qml-battery/
+%{_qt5_examplesdir}/systeminfo/qml-deviceinfo/
+%{_qt5_examplesdir}/systeminfo/qml-inputinfo/
+
+%changelog
+%autochangelog
diff --git a/anda/moby-extras/moby-buildx/moby-buildx.spec b/anda/moby-extras/moby-buildx/moby-buildx.spec
index a85ab9d506..7ef794e875 100644
--- a/anda/moby-extras/moby-buildx/moby-buildx.spec
+++ b/anda/moby-extras/moby-buildx/moby-buildx.spec
@@ -1,7 +1,7 @@
%define debug_package %{nil}
Name: moby-buildx
-Version: 0.10.3
+Version: 0.10.4
Release: 1%{?dist}
Summary: Docker CLI plugin for extended build capabilities with BuildKit
diff --git a/anda/nim/nim/nim.spec b/anda/nim/nim/nim.spec
index 131adb1b60..814b013fe4 100644
--- a/anda/nim/nim/nim.spec
+++ b/anda/nim/nim/nim.spec
@@ -2,8 +2,8 @@
%global debug_package %{nil}
Name: nim
-Version: 1.6.10
-Release: %autorelease
+Version: 1.6.12
+Release: 1%{?dist}
Summary: Imperative, multi-paradigm, compiled programming language
License: MIT and BSD
URL: https://nim-lang.org
diff --git a/anda/others/sass/sass.spec b/anda/others/sass/sass.spec
index b317a53297..22a6a64dfb 100644
--- a/anda/others/sass/sass.spec
+++ b/anda/others/sass/sass.spec
@@ -4,7 +4,7 @@
%define _build_id_links none
Name: sass
-Version: 1.58.3
+Version: 1.59.3
Release: 1%{?dist}
Summary: The reference implementation of Sass, written in Dart
License: MIT
diff --git a/anda/others/tau-helium/tau-helium.spec b/anda/others/tau-helium/tau-helium.spec
index 1d72a06f8a..4fbc5a2cf6 100644
--- a/anda/others/tau-helium/tau-helium.spec
+++ b/anda/others/tau-helium/tau-helium.spec
@@ -1,6 +1,6 @@
Summary: tauOS GTK/GNOME Shell Themes
Name: tau-helium
-Version: 1.4.75
+Version: 1.5.0
Release: 1%{?dist}
License: GPLv3
URL: https://github.com/tau-OS/tau-helium
diff --git a/anda/others/unity-greeter/unity-greeter.spec b/anda/others/unity-greeter/unity-greeter.spec
index a5f80427bf..ae999ffb92 100644
--- a/anda/others/unity-greeter/unity-greeter.spec
+++ b/anda/others/unity-greeter/unity-greeter.spec
@@ -22,6 +22,7 @@ BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xext)
BuildRequires: vala
BuildRequires: unity-settings-daemon-devel
+Requires: unity-shell
Requires: unity-settings-daemon
Requires: lightdm%{?_isa}
diff --git a/anda/others/unity-scope-home/anda.hcl b/anda/others/unity-scope-home/anda.hcl
new file mode 100644
index 0000000000..d3359c8c19
--- /dev/null
+++ b/anda/others/unity-scope-home/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "unity-scope-home.spec"
+ }
+}
diff --git a/anda/others/unity-scope-home/unity-scope-home.spec b/anda/others/unity-scope-home/unity-scope-home.spec
new file mode 100644
index 0000000000..7fd2892f19
--- /dev/null
+++ b/anda/others/unity-scope-home/unity-scope-home.spec
@@ -0,0 +1,55 @@
+Name: unity-scope-home
+Summary: Home scope that aggregates results from multiple scopes
+Version: 19.04.20190412
+Release: %autorelease
+License: GPLv3
+URL: https://launchpad.net/unity-scope-home
+Source0: http://archive.ubuntu.com/ubuntu/pool/universe/u/unity-scope-home/unity-scope-home_6.8.2+%{version}.orig.tar.gz
+Patch0: https://gitlab.com/unity-for-arch/unity-scope-home/-/raw/main/fix-vala-0.56-errors.patch
+
+BuildRequires: automake libtool gnome-common
+BuildRequires: intltool
+BuildRequires: make
+BuildRequires: gcc
+BuildRequires: g++
+BuildRequires: vala
+BuildRequires: pkgconfig(gobject-2.0)
+BuildRequires: pkgconfig(gio-2.0)
+BuildRequires: pkgconfig(gio-unix-2.0)
+BuildRequires: pkgconfig(dee-1.0)
+BuildRequires: pkgconfig(gee-0.8)
+BuildRequires: pkgconfig(json-glib-1.0)
+BuildRequires: pkgconfig(libsoup-gnome-2.4)
+BuildRequires: pkgconfig(uuid)
+BuildRequires: pkgconfig(unity)
+BuildRequires: pkgconfig(unity-protocol-private)
+BuildRequires: pkgconfig(unity-extras)
+
+%description
+Theme and icons for Unity.
+
+%prep
+%autosetup -c -p1
+
+%build
+NOCONFIGURE=1 \
+./autogen.sh
+
+# Cannot build with Fedora's libunity
+%configure --disable-static
+%make_build
+
+%install
+%make_install
+rm -fv %{buildroot}%{_libdir}/*.la
+
+%files
+%license COPYING
+%dir %{_libexecdir}/unity-scope-home
+%{_libexecdir}/unity-scope-home/unity-scope-home
+%dir %{_datadir}/unity/scopes
+%{_datadir}/unity/scopes/*.scope
+%{_datadir}/dbus-1/services/unity-scope-home.service
+
+%changelog
+%autochangelog
diff --git a/anda/others/unity-session/anda.hcl b/anda/others/unity-session/anda.hcl
new file mode 100644
index 0000000000..65884f4300
--- /dev/null
+++ b/anda/others/unity-session/anda.hcl
@@ -0,0 +1,5 @@
+project "pkg" {
+ rpm {
+ spec = "unity-session.spec"
+ }
+}
diff --git a/anda/others/unity-session/unity-session.spec b/anda/others/unity-session/unity-session.spec
new file mode 100644
index 0000000000..d42e75c9db
--- /dev/null
+++ b/anda/others/unity-session/unity-session.spec
@@ -0,0 +1,54 @@
+%define _ubuntu_rel 1ubuntu2
+
+Name: unity-session
+Summary: Lightdm profile for Unity 7
+Version: 43.0
+Release: %autorelease
+
+License: GPLv2
+URL: https://packages.ubuntu.com/jammy/unity-session
+Source0: http://archive.ubuntu.com/ubuntu/pool/universe/g/gnome-session/unity-session_%{version}-%{_ubuntu_rel}_all.deb
+Source1: https://salsa.debian.org/gnome-team/gnome-session/-/raw/ubuntu/master/debian/data/run-systemd-session
+BuildArch: noarch
+
+BuildRequires: systemd-rpm-macros
+BuildRequires: binutils
+BuildRequires: zstd
+Requires: dbus-tools
+Requires: unity-shell
+Requires: unity-settings-daemon
+Recommends: lightdm
+
+%description
+Autostart and profile for Unity 7 in Lightdm.
+
+%prep
+%autosetup -T -c
+
+%build
+ar x %{SOURCE0}
+tar --zstd -xvf data.tar.zst ./usr/share/doc/unity-session/copyright
+mv -f usr/share/doc/unity-session/copyright ./COPYING
+rm -rf usr
+
+%install
+tar --zstd -xvf data.tar.zst -C %{buildroot}
+rm -rf %{buildroot}/usr/share/doc
+
+mkdir -p %{buildroot}%{_libexecdir}
+# Is needed for xsession but is in gnome-bin. Still noarch as it is a shellscript
+install -p -m755 %{SOURCE1} %{buildroot}%{_libexecdir}/run-systemd-session
+
+%files
+%license COPYING
+%{_sysconfdir}/xdg/autostart/nemo-unity-autostart.desktop
+%{_userunitdir}/gnome-session.service
+%{_userunitdir}/unity-session.target
+%{_libexecdir}/run-systemd-session
+%{_datadir}/gnome-session/sessions/unity.session
+%{_datadir}/lightdm/lightdm.conf.d/50-unity.conf
+%{_datadir}/nemo/actions/*.nemo_action
+%{_datadir}/xsessions/unity.desktop
+
+%changelog
+%autochangelog
diff --git a/anda/python/orjson/python3-orjson.spec b/anda/python/orjson/python3-orjson.spec
index 30eefeca67..0a354af4bd 100644
--- a/anda/python/orjson/python3-orjson.spec
+++ b/anda/python/orjson/python3-orjson.spec
@@ -1,7 +1,7 @@
%global debug_package %{nil}
Name: python3-orjson
-Version: 3.8.6
+Version: 3.8.7
Release: 1%{?dist}
Summary: Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
License: MIT or APACHE-2.0
diff --git a/anda/python/protobuf/python3-protobuf.spec b/anda/python/protobuf/python3-protobuf.spec
index cddf33938c..f77cfde307 100644
--- a/anda/python/protobuf/python3-protobuf.spec
+++ b/anda/python/protobuf/python3-protobuf.spec
@@ -2,7 +2,7 @@
%global pypi_name protobuf
Name: python-%{pypi_name}
-Version: 4.22.0
+Version: 4.22.1
Release: 1%{?dist}
Summary: Protocol Buffers
diff --git a/anda/python/ruff/python3-ruff.spec b/anda/python/ruff/python3-ruff.spec
index 6c9e70a4d6..d01eefe8ba 100644
--- a/anda/python/ruff/python3-ruff.spec
+++ b/anda/python/ruff/python3-ruff.spec
@@ -1,7 +1,7 @@
%define debug_package %{nil}
Name: python3-ruff
-Version: 0.0.252
+Version: 0.0.256
Release: 1%{?dist}
Summary: An extremely fast Python linter, written in Rust
License: MIT
diff --git a/anda/rust/hyperfine/hyperfine-fix-metadata-auto.diff b/anda/rust/hyperfine/hyperfine-fix-metadata-auto.diff
index 7f96e53798..790baab87e 100644
--- a/anda/rust/hyperfine/hyperfine-fix-metadata-auto.diff
+++ b/anda/rust/hyperfine/hyperfine-fix-metadata-auto.diff
@@ -1,17 +1,17 @@
---- hyperfine-1.15.0/Cargo.toml 1970-01-01T00:00:01+00:00
-+++ hyperfine-1.15.0/Cargo.toml 1970-01-01T00:00:01+00:00
-@@ -96,9 +96,6 @@
+--- hyperfine-1.16.0/Cargo.toml 1970-01-01T00:00:01+00:00
++++ hyperfine-1.16.0/Cargo.toml 2023-03-15T13:37:20.618831+00:00
+@@ -100,9 +100,6 @@
[features]
windows_process_extensions_main_thread_handle = []
-[target."cfg(all(windows, not(windows_process_extensions_main_thread_handle)))".dependencies.once_cell]
--version = "1.14"
+-version = "1.17"
-
[target."cfg(not(windows))".dependencies.libc]
version = "0.2"
-@@ -106,12 +103,3 @@
- version = "0.25.0"
+@@ -110,13 +107,3 @@
+ version = "0.26.2"
features = ["zerocopy"]
-[target."cfg(windows)".dependencies.winapi]
@@ -22,4 +22,5 @@
- "winnt",
- "jobapi2",
- "tlhelp32",
+- "handleapi",
-]
diff --git a/anda/rust/hyperfine/rust-hyperfine.spec b/anda/rust/hyperfine/rust-hyperfine.spec
index 5098115277..2e0d9374c6 100644
--- a/anda/rust/hyperfine/rust-hyperfine.spec
+++ b/anda/rust/hyperfine/rust-hyperfine.spec
@@ -1,11 +1,11 @@
-# Generated by rust2rpm 23
+# Generated by rust2rpm 24
%bcond_without check
%global crate hyperfine
Name: rust-hyperfine
-Version: 1.15.0
-Release: %autorelease
+Version: 1.16.0
+Release: 1%{?dist}
Summary: Command-line benchmarking tool
# Upstream license specification: MIT/Apache-2.0
@@ -18,7 +18,7 @@ Patch: hyperfine-fix-metadata-auto.diff
BuildRequires: anda-srpm-macros rust-packaging >= 21
%global _description %{expand:
-Command-line benchmarking tool.}
+A command-line benchmarking tool.}
%description %{_description}
diff --git a/anda/rust/kondo-ui/rust-kondo-ui.spec b/anda/rust/kondo-ui/rust-kondo-ui.spec
index 9888ba6e31..377c7d973a 100644
--- a/anda/rust/kondo-ui/rust-kondo-ui.spec
+++ b/anda/rust/kondo-ui/rust-kondo-ui.spec
@@ -2,8 +2,8 @@
%global crate kondo-ui
Name: rust-kondo-ui
-Version: 0.2.0
-Release: %autorelease
+Version: 0.6.0
+Release: 1%{?dist}
Summary: Filesystem cleaning tool that recursively searches directories for known project structures and allows you to clean them of unnecessary files like build artifacts
License: MIT
diff --git a/anda/rust/kondo/rust-kondo.spec b/anda/rust/kondo/rust-kondo.spec
index e0277ce14d..268c1fd444 100644
--- a/anda/rust/kondo/rust-kondo.spec
+++ b/anda/rust/kondo/rust-kondo.spec
@@ -4,8 +4,8 @@
%global crate kondo
Name: rust-kondo
-Version: 0.5
-Release: %autorelease
+Version: 0.6
+Release: 1%{?dist}
Summary: Filesystem cleaning tool that recursively searches directories for known project structures and determines how much space you could save by deleting the unnecessary files
License: MIT
diff --git a/anda/rust/maturin/rust-maturin.spec b/anda/rust/maturin/rust-maturin.spec
index 589f7d93ee..dd0f059806 100644
--- a/anda/rust/maturin/rust-maturin.spec
+++ b/anda/rust/maturin/rust-maturin.spec
@@ -2,7 +2,7 @@
%global crate maturin
Name: rust-maturin
-Version: 0.14.14
+Version: 0.14.15
Release: 1%{?dist}
Summary: Build and publish crates with pyo3, rust-cpython and cffi bindings as well as rust binaries as python packages
diff --git a/anda/rust/rnote/rnote.spec b/anda/rust/rnote/rnote.spec
index b63bd4ed41..4f11dc38df 100644
--- a/anda/rust/rnote/rnote.spec
+++ b/anda/rust/rnote/rnote.spec
@@ -1,5 +1,5 @@
Name: rnote
-Version: 0.5.14
+Version: 0.5.16
Release: 1%{?dist}
Summary: Sketch and take handwritten notes.
License: GPLv3
diff --git a/anda/rust/typeracer/rust-typeracer.spec b/anda/rust/typeracer/rust-typeracer.spec
index 8091e78195..45a4193e81 100644
--- a/anda/rust/typeracer/rust-typeracer.spec
+++ b/anda/rust/typeracer/rust-typeracer.spec
@@ -6,8 +6,8 @@
%global crate typeracer
Name: rust-typeracer
-Version: 2.1.2
-Release: %autorelease
+Version: 2.1.3
+Release: 1%{?dist}
Summary: Terminal typing game
License: GPL-3.0
diff --git a/anda/rust/zellij/rust-zellij.spec b/anda/rust/zellij/rust-zellij.spec
index bd0dcc4da1..3ec5050d61 100644
--- a/anda/rust/zellij/rust-zellij.spec
+++ b/anda/rust/zellij/rust-zellij.spec
@@ -46,8 +46,8 @@ EOF\
%global crate zellij
Name: rust-zellij
-Version: 0.34.4
-Release: %autorelease
+Version: 0.35.2
+Release: 1%{?dist}
Summary: Terminal workspace with batteries included
License: MIT
diff --git a/anda/tools/fuc/fuc.spec b/anda/tools/fuc/fuc.spec
index 08f1a5e84a..85c5d83052 100644
--- a/anda/tools/fuc/fuc.spec
+++ b/anda/tools/fuc/fuc.spec
@@ -1,8 +1,8 @@
%global debug_package %{nil}
Name: fuc
-Version: 1.1.3
-Release: %autorelease
+Version: 1.1.4
+Release: 1%{?dist}
Summary: Modern, performance focused unix commands
URL: https://github.com/SUPERCILEX/fuc
Source0: https://raw.githubusercontent.com/SUPERCILEX/fuc/%{version}/README.md
diff --git a/anda/tools/gcm-core/gcm-core.spec b/anda/tools/gcm-core/gcm-core.spec
index e118a55c50..7d50390bd1 100644
--- a/anda/tools/gcm-core/gcm-core.spec
+++ b/anda/tools/gcm-core/gcm-core.spec
@@ -5,7 +5,7 @@
%global forgeurl https://github.com/GitCredentialManager/git-credential-manager
Name: gcm-core
-Version: 2.0.886
+Version: 2.0.935
%forgemeta -i
Release: 1%{?dist}
Summary: Secure, cross-platform Git credential storage
diff --git a/anda/tools/gradle/gradle.spec b/anda/tools/gradle/gradle.spec
index 8f9f96ac61..c00e3f5fe3 100644
--- a/anda/tools/gradle/gradle.spec
+++ b/anda/tools/gradle/gradle.spec
@@ -1,5 +1,5 @@
Name: gradle
-Version: 8.0.1
+Version: 8.0.2
Release: 1%{?dist}
Summary: Powerful build system for the JVM
URL: https://gradle.org/
diff --git a/anda/tools/lorax/anda.hcl b/anda/tools/lorax/anda.hcl
index 1c6035937c..d85035e5da 100644
--- a/anda/tools/lorax/anda.hcl
+++ b/anda/tools/lorax/anda.hcl
@@ -6,7 +6,7 @@ project pkg {
scm_opts = {
method = "git"
package = "lorax"
- branch = "lorax-38.6-1"
+ branch = "lorax-39.0-1"
write_tar = "true"
spec = "lorax.spec"
git_get = "git clone https://github.com/weldr/lorax.git"