From c1d3da9ca87c414100b1cb969e36b8d7d05b9a74 Mon Sep 17 00:00:00 2001
From: davidovski <david@davidovski.xyz>
Date: Wed, 10 Aug 2022 09:16:34 +0100
Subject: added ovmf, lolcat, spice, and squashfstools

---
 repo/acpica/acpica.xibuild                         |  25 +
 repo/acpica/disable-werror.patch                   |  13 +
 repo/acpica/iasl.xibuild                           |   7 +
 repo/alsa-plugins/pulseaudio-alsa.xibuild          |   2 +-
 repo/bash/bash.xibuild                             |   2 +
 repo/catch2/catch2.xibuild                         |   2 +-
 repo/dino/dino.xibuild                             |  32 +
 repo/dino/mobile-ui.patch                          | 967 +++++++++++++++++++++
 ...Tools-do-not-build-BrotliCompress-RH-only.patch |  43 +
 ...g-remove-package-private-Brotli-include-p.patch |  49 ++
 repo/edk2/build-hack.patch                         |  13 +
 repo/edk2/disable-werror.patch                     |  11 +
 repo/edk2/edk2-ovmf.xibuild                        |  19 +
 repo/edk2/edk2.xibuild                             |  84 ++
 repo/hdparm/hdparm.xibuild                         |  27 +
 repo/i2c-tools/i2c-tools.xibuild                   |   4 +
 repo/imagemagick/imagemagick.xibuild               |   4 +-
 repo/linux-firmware/linux-firmware.xibuild         |   2 +-
 repo/linux-headers/linux-headers.xibuild           |   2 +-
 repo/linux-libre/linux-libre-src.xibuild           |   2 +-
 repo/linux-libre/linux-libre.xibuild               |  10 +-
 repo/linux/linux.xibuild                           |   2 +-
 repo/lolcat/lolcat.xibuild                         |  19 +
 repo/mesa/mesa.xibuild                             |   2 +-
 repo/meson/meson.xibuild                           |   2 +-
 repo/nuspell/nuspell.xibuild                       |  30 +
 .../polkit-gnome-authentication-agent-1.desktop    |  88 ++
 repo/polkit-gnome/polkit-gnome.xibuild             |  30 +
 repo/polkit/alpine-polkit.pam                      |   7 +
 repo/polkit/polkit-common.pre-install              |   6 +
 repo/polkit/polkit-common.pre-upgrade              |   6 +
 repo/polkit/polkit.initd                           |  12 +
 repo/polkit/polkit.xibuild                         |  68 +-
 repo/ronn/fix-ruby-3.1-compat.patch                |  24 +
 repo/ronn/mustache-1.X.patch                       |  50 ++
 repo/ronn/ronn.xibuild                             |  53 ++
 repo/ruby-kramdown/gemspec.patch                   |  18 +
 repo/ruby-kramdown/ruby-kramdown.xibuild           |  48 +
 repo/ruby-mustache/fix-test-race-condition.patch   |  36 +
 repo/ruby-mustache/ruby-mustache.xibuild           |  46 +
 repo/ruby-mustache/skip-simplecov.patch            |  13 +
 repo/ruby-nokogiri/gemspec-fix-deps.patch          |  15 +
 repo/ruby-nokogiri/ruby-nokogiri.xibuild           |  62 ++
 repo/ruby-nokogiri/shutdown-libxml2-warning.patch  |  12 +
 .../test-helper-remove-unnecessary-deps.patch      |  22 +
 repo/spice-gtk/disable-test-relying-on-usb.patch   |  22 +
 repo/spice-gtk/fix-pkgconfig-version.patch         |  13 +
 repo/spice-gtk/spice-gtk.xibuild                   |  46 +
 repo/spice-vdagent/spice-vdagent.xibuild           |  33 +
 repo/spice-vdagent/spice-vdagentd.initd            |  13 +
 repo/squashfs-tools/fix-compat.patch               |  12 +
 repo/squashfs-tools/squashfs-tools.xibuild         |  27 +
 repo/xipkg/xipkg.xibuild                           |  12 +-
 repo/xiutils/shmk.xibuild                          |   7 +
 repo/xiutils/xitui.xibuild                         |   4 +-
 repo/xiutils/xiutils.xibuild                       |   7 +-
 56 files changed, 2132 insertions(+), 55 deletions(-)
 create mode 100644 repo/acpica/acpica.xibuild
 create mode 100644 repo/acpica/disable-werror.patch
 create mode 100644 repo/acpica/iasl.xibuild
 create mode 100644 repo/dino/dino.xibuild
 create mode 100644 repo/dino/mobile-ui.patch
 create mode 100644 repo/edk2/0008-BaseTools-do-not-build-BrotliCompress-RH-only.patch
 create mode 100644 repo/edk2/0009-MdeModulePkg-remove-package-private-Brotli-include-p.patch
 create mode 100644 repo/edk2/build-hack.patch
 create mode 100644 repo/edk2/disable-werror.patch
 create mode 100644 repo/edk2/edk2-ovmf.xibuild
 create mode 100644 repo/edk2/edk2.xibuild
 create mode 100644 repo/hdparm/hdparm.xibuild
 create mode 100644 repo/lolcat/lolcat.xibuild
 create mode 100644 repo/nuspell/nuspell.xibuild
 create mode 100644 repo/polkit-gnome/polkit-gnome-authentication-agent-1.desktop
 create mode 100644 repo/polkit-gnome/polkit-gnome.xibuild
 create mode 100644 repo/polkit/alpine-polkit.pam
 create mode 100644 repo/polkit/polkit-common.pre-install
 create mode 100644 repo/polkit/polkit-common.pre-upgrade
 create mode 100644 repo/polkit/polkit.initd
 create mode 100644 repo/ronn/fix-ruby-3.1-compat.patch
 create mode 100644 repo/ronn/mustache-1.X.patch
 create mode 100644 repo/ronn/ronn.xibuild
 create mode 100644 repo/ruby-kramdown/gemspec.patch
 create mode 100644 repo/ruby-kramdown/ruby-kramdown.xibuild
 create mode 100644 repo/ruby-mustache/fix-test-race-condition.patch
 create mode 100644 repo/ruby-mustache/ruby-mustache.xibuild
 create mode 100644 repo/ruby-mustache/skip-simplecov.patch
 create mode 100644 repo/ruby-nokogiri/gemspec-fix-deps.patch
 create mode 100644 repo/ruby-nokogiri/ruby-nokogiri.xibuild
 create mode 100644 repo/ruby-nokogiri/shutdown-libxml2-warning.patch
 create mode 100644 repo/ruby-nokogiri/test-helper-remove-unnecessary-deps.patch
 create mode 100644 repo/spice-gtk/disable-test-relying-on-usb.patch
 create mode 100644 repo/spice-gtk/fix-pkgconfig-version.patch
 create mode 100644 repo/spice-gtk/spice-gtk.xibuild
 create mode 100644 repo/spice-vdagent/spice-vdagent.xibuild
 create mode 100644 repo/spice-vdagent/spice-vdagentd.initd
 create mode 100644 repo/squashfs-tools/fix-compat.patch
 create mode 100644 repo/squashfs-tools/squashfs-tools.xibuild
 create mode 100644 repo/xiutils/shmk.xibuild

diff --git a/repo/acpica/acpica.xibuild b/repo/acpica/acpica.xibuild
new file mode 100644
index 0000000..dcc24ce
--- /dev/null
+++ b/repo/acpica/acpica.xibuild
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+NAME="acpica"
+DESC="ACPI Component Architecture utilities"
+
+MAKEDEPS=" flex bison"
+
+PKG_VER=20210930
+SOURCE="https://acpica.org/sites/acpica/files/acpica-unix-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+disable-werror.patch
+"
+
+prepare () {
+    apply_patches
+}
+
+build() {
+	make
+}
+
+package() {
+	make install DESTDIR="$PKG_DEST"
+}
diff --git a/repo/acpica/disable-werror.patch b/repo/acpica/disable-werror.patch
new file mode 100644
index 0000000..da0c7c8
--- /dev/null
+++ b/repo/acpica/disable-werror.patch
@@ -0,0 +1,13 @@
+diff --git a/generate/unix/Makefile.config b/generate/unix/Makefile.config
+index a1f0313..8c4e8e7 100644
+--- a/generate/unix/Makefile.config
++++ b/generate/unix/Makefile.config
+@@ -194,7 +194,7 @@ CWARNINGFLAGS = \
+     -Wall\
+     -Wbad-function-cast\
+     -Wdeclaration-after-statement\
+-    -Werror\
++    -Wno-pointer-to-int-cast\
+     -Wformat=2\
+     -Wmissing-declarations\
+     -Wmissing-prototypes\
diff --git a/repo/acpica/iasl.xibuild b/repo/acpica/iasl.xibuild
new file mode 100644
index 0000000..8cd90ca
--- /dev/null
+++ b/repo/acpica/iasl.xibuild
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+DESC="ACPI ASL compiler"
+
+package () {
+    add_from_main usr/bin/iasl
+}
diff --git a/repo/alsa-plugins/pulseaudio-alsa.xibuild b/repo/alsa-plugins/pulseaudio-alsa.xibuild
index 942ee75..738e80a 100644
--- a/repo/alsa-plugins/pulseaudio-alsa.xibuild
+++ b/repo/alsa-plugins/pulseaudio-alsa.xibuild
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 DESC="Config files required for alsa to work with pulseaudio"
-DESP="alsa-plugins"
+DEPS="alsa-plugins"
 
 package () {
     mkdir -p $PKG_DEST/etc/alsa/conf.d
diff --git a/repo/bash/bash.xibuild b/repo/bash/bash.xibuild
index 63626b5..81b85c0 100644
--- a/repo/bash/bash.xibuild
+++ b/repo/bash/bash.xibuild
@@ -24,3 +24,5 @@ postinstall () {
         echo "/bin/bash" >> /etc/shells
     fi
 }
+
+
diff --git a/repo/catch2/catch2.xibuild b/repo/catch2/catch2.xibuild
index f493465..3774bbf 100644
--- a/repo/catch2/catch2.xibuild
+++ b/repo/catch2/catch2.xibuild
@@ -21,10 +21,10 @@ check() {
 	cd build
 	# ApprovalTests is broken https://github.com/catchorg/Catch2/issues/1780
 	CTEST_OUTPUT_ON_FAILURE=TRUE ctest -E "ApprovalTests"
+    cd ..
 }
 
 package() {
-    cd $BUILD_ROOT
 	DESTDIR="$PKG_DEST" cmake --install build
 }
 
diff --git a/repo/dino/dino.xibuild b/repo/dino/dino.xibuild
new file mode 100644
index 0000000..8f40781
--- /dev/null
+++ b/repo/dino/dino.xibuild
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+NAME="dino"
+DESC="Modern Jabber/XMPP client"
+
+MAKEDEPS=" cmake glib glib-networking gpgme gspell gst-libav gst-plugins-base gtk3 libgcrypt libgee libhandy1 libnice libqrencode libsignal-protocol-c libsoup libsrtp ninja sqlite vala webrtc-audio-processing"
+
+PKG_VER=0.3.0
+SOURCE="https://github.com/dino/dino/releases/download/v$PKG_VER/dino-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+mobile-ui.patch
+"
+
+build() {
+	./configure \
+		--prefix=/usr \
+		--sysconfdir=/etc \
+		--mandir=/usr/share/man \
+		--localstatedir=/var \
+		--with-tests
+	make
+}
+
+check() {
+	build/xmpp-vala-test
+	build/signal-protocol-vala-test
+}
+
+package() {
+	make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/dino/mobile-ui.patch b/repo/dino/mobile-ui.patch
new file mode 100644
index 0000000..f274acf
--- /dev/null
+++ b/repo/dino/mobile-ui.patch
@@ -0,0 +1,967 @@
+diff --git a/cmake/FindHandy.cmake b/cmake/FindHandy.cmake
+new file mode 100644
+index 00000000..49148f0f
+--- /dev/null
++++ b/cmake/FindHandy.cmake
+@@ -0,0 +1,11 @@
++include(PkgConfigWithFallback)
++find_pkg_config_with_fallback(Handy
++    PKG_CONFIG_NAME libhandy-1
++    LIB_NAMES libhandy-1
++    INCLUDE_NAMES handy.h
++)
++
++include(FindPackageHandleStandardArgs)
++find_package_handle_standard_args(Handy
++    REQUIRED_VARS Handy_LIBRARY
++    VERSION_VAR Handy_VERSION)
+diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
+index e052785a..f6c3edc7 100644
+--- a/main/CMakeLists.txt
++++ b/main/CMakeLists.txt
+@@ -11,6 +11,7 @@ find_packages(MAIN_PACKAGES REQUIRED
+     GTK3
+     ICU
+     Gspell
++    Handy
+ )
+ 
+ set(RESOURCE_LIST
+diff --git a/main/data/add_conversation/select_jid_fragment.ui b/main/data/add_conversation/select_jid_fragment.ui
+index 50bc0e36..be56e710 100644
+--- a/main/data/add_conversation/select_jid_fragment.ui
++++ b/main/data/add_conversation/select_jid_fragment.ui
+@@ -1,82 +1,88 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <interface>
+     <template class="DinoUiSelectJidFragment">
+-        <property name="height_request">500</property>
+-        <property name="width_request">460</property>
++        <property name="height_request">480</property>
+         <property name="visible">True</property>
+         <child>
+-            <object class="GtkGrid">
+-                <property name="expand">True</property>
+-                <property name="margin-top">20</property>
+-                <property name="margin-right">80</property>
+-                <property name="margin-bottom">20</property>
+-                <property name="margin-left">80</property>
+-                <property name="orientation">vertical</property>
+-                <property name="row-spacing">10</property>
++            <object class="HdyClamp">
++                <property name="margin-right">18</property>
++                <property name="margin-left">18</property>
++                <property name="maximum-size">300</property>
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <child>
+-                    <object class="GtkEntry" id="entry">
+-                        <property name="activates_default">True</property>
+-                        <property name="hexpand">True</property>
+-                        <property name="visible">True</property>
+-                    </object>
+-                </child>
+-                <child>
+-                    <object class="GtkBox">
++                    <object class="GtkGrid">
+                         <property name="expand">True</property>
++                        <property name="margin-top">20</property>
++                        <property name="margin-bottom">20</property>
+                         <property name="orientation">vertical</property>
++                        <property name="row-spacing">10</property>
+                         <property name="visible">True</property>
+                         <child>
+-                            <object class="GtkFrame">
++                            <object class="GtkEntry" id="entry">
++                                <property name="activates_default">True</property>
++                                <property name="hexpand">True</property>
++                                <property name="visible">True</property>
++                            </object>
++                        </child>
++                        <child>
++                            <object class="GtkBox">
++                                <property name="expand">True</property>
++                                <property name="orientation">vertical</property>
+                                 <property name="visible">True</property>
+                                 <child>
+-                                    <object class="GtkScrolledWindow" id="scrolled_window">
+-                                        <property name="hscrollbar_policy">never</property>
+-                                        <property name="expand">True</property>
++                                    <object class="GtkFrame">
+                                         <property name="visible">True</property>
+                                         <child>
+-                                            <object class="GtkBox" id="box">
+-                                                <property name="orientation">vertical</property>
++                                            <object class="GtkScrolledWindow" id="scrolled_window">
++                                                <property name="hscrollbar_policy">never</property>
++                                                <property name="expand">True</property>
+                                                 <property name="visible">True</property>
++                                                <child>
++                                                    <object class="GtkBox" id="box">
++                                                        <property name="orientation">vertical</property>
++                                                        <property name="visible">True</property>
++                                                    </object>
++                                                </child>
+                                             </object>
+                                         </child>
+                                     </object>
+                                 </child>
+-                            </object>
+-                        </child>
+-                        <child>
+-                            <object class="GtkToolbar">
+-                                <property name="visible">True</property>
+-                                <style>
+-                                    <class name="inline-toolbar"/>
+-                                </style>
+                                 <child>
+-                                    <object class="GtkToolItem">
++                                    <object class="GtkToolbar">
+                                         <property name="visible">True</property>
++                                        <style>
++                                            <class name="inline-toolbar"/>
++                                        </style>
+                                         <child>
+-                                            <object class="GtkBox">
++                                            <object class="GtkToolItem">
+                                                 <property name="visible">True</property>
+                                                 <child>
+-                                                    <object class="GtkButton" id="add_button">
++                                                    <object class="GtkBox">
+                                                         <property name="visible">True</property>
+                                                         <child>
+-                                                            <object class="GtkImage">
+-                                                                <property name="icon-name">list-add-symbolic</property>
+-                                                                <property name="icon-size">1</property>
++                                                            <object class="GtkButton" id="add_button">
+                                                                 <property name="visible">True</property>
++                                                                <child>
++                                                                    <object class="GtkImage">
++                                                                        <property name="icon-name">list-add-symbolic</property>
++                                                                        <property name="icon-size">1</property>
++                                                                        <property name="visible">True</property>
++                                                                    </object>
++                                                                </child>
+                                                             </object>
+                                                         </child>
+-                                                    </object>
+-                                                </child>
+-                                                <child>
+-                                                    <object class="GtkButton" id="remove_button">
+-                                                        <property name="sensitive">False</property>
+-                                                        <property name="visible">True</property>
+                                                         <child>
+-                                                            <object class="GtkImage">
+-                                                                <property name="icon-name">list-remove-symbolic</property>
+-                                                                <property name="icon-size">1</property>
++                                                            <object class="GtkButton" id="remove_button">
++                                                                <property name="sensitive">False</property>
+                                                                 <property name="visible">True</property>
++                                                                <child>
++                                                                    <object class="GtkImage">
++                                                                        <property name="icon-name">list-remove-symbolic</property>
++                                                                        <property name="icon-size">1</property>
++                                                                        <property name="visible">True</property>
++                                                                    </object>
++                                                                </child>
+                                                             </object>
+                                                         </child>
+                                                     </object>
+diff --git a/main/data/contact_details_dialog.ui b/main/data/contact_details_dialog.ui
+index 4058bc77..3ba17746 100644
+--- a/main/data/contact_details_dialog.ui
++++ b/main/data/contact_details_dialog.ui
+@@ -1,6 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <interface>
+     <template class="DinoUiContactDetailsDialog">
++        <property name="default_width">800</property>
+         <property name="modal">True</property>
+         <child type="titlebar">
+             <object class="GtkHeaderBar">
+@@ -21,98 +22,103 @@
+                         <property name="expand">True</property>
+                         <property name="visible">True</property>
+                         <child>
+-                            <object class="GtkBox">
+-                                <property name="orientation">vertical</property>
++                            <object class="HdyClamp">
++                                <property name="margin-right">18</property>
++                                <property name="margin-left">18</property>
+                                 <property name="visible">True</property>
++                                <property name="can_focus">False</property>
+                                 <child>
+-                                    <object class="GtkGrid">
+-                                        <property name="margin-top">20</property>
+-                                        <property name="margin-bottom">12</property>
+-                                        <property name="margin-right">100</property>
+-                                        <property name="margin-left">100</property>
+-                                        <property name="column-spacing">10</property>
++                                    <object class="GtkBox">
++                                        <property name="orientation">vertical</property>
+                                         <property name="visible">True</property>
+                                         <child>
+-                                            <object class="DinoUiAvatarImage" id="avatar">
+-                                                <property name="height">50</property>
+-                                                <property name="width">50</property>
+-                                                <property name="visible">True</property>
+-                                                <property name="allow_gray">False</property>
+-                                            </object>
+-                                            <packing>
+-                                                <property name="left_attach">0</property>
+-                                                <property name="top_attach">0</property>
+-                                                <property name="width">1</property>
+-                                                <property name="height">2</property>
+-                                            </packing>
+-                                        </child>
+-                                        <child>
+-                                            <object class="DinoUiUtilEntryLabelHybrid" id="name_hybrid">
+-                                                <property name="xalign">0</property>
+-                                                <property name="expand">True</property>
+-                                                <property name="visible">True</property>
+-                                            </object>
+-                                            <packing>
+-                                                <property name="left_attach">1</property>
+-                                                <property name="top_attach">0</property>
+-                                                <property name="width">1</property>
+-                                                <property name="height">1</property>
+-                                            </packing>
+-                                        </child>
+-                                        <child>
+-                                            <object class="GtkLabel" id="name_label">
+-                                                <property name="xalign">0</property>
+-                                                <property name="expand">True</property>
++                                            <object class="GtkGrid">
++                                                <property name="margin-top">20</property>
++                                                <property name="margin-bottom">12</property>
++                                                <property name="column-spacing">10</property>
++                                                <property name="expand">False</property>
+                                                 <property name="visible">True</property>
+-                                                <attributes>
+-                                                    <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+-                                                </attributes>
++                                                <child>
++                                                    <object class="DinoUiAvatarImage" id="avatar">
++                                                        <property name="height">50</property>
++                                                        <property name="width">50</property>
++                                                        <property name="visible">True</property>
++                                                        <property name="allow_gray">False</property>
++                                                    </object>
++                                                    <packing>
++                                                        <property name="left_attach">0</property>
++                                                        <property name="top_attach">0</property>
++                                                        <property name="width">1</property>
++                                                        <property name="height">2</property>
++                                                    </packing>
++                                                </child>
++                                                <child>
++                                                    <object class="DinoUiUtilEntryLabelHybrid" id="name_hybrid">
++                                                        <property name="xalign">0</property>
++                                                        <property name="expand">True</property>
++                                                        <property name="visible">True</property>
++                                                    </object>
++                                                    <packing>
++                                                        <property name="left_attach">1</property>
++                                                        <property name="top_attach">0</property>
++                                                        <property name="width">1</property>
++                                                        <property name="height">1</property>
++                                                    </packing>
++                                                </child>
++                                                <child>
++                                                    <object class="GtkLabel" id="name_label">
++                                                        <property name="xalign">0</property>
++                                                        <property name="expand">True</property>
++                                                        <property name="visible">True</property>
++                                                        <attributes>
++                                                            <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
++                                                        </attributes>
++                                                    </object>
++                                                    <packing>
++                                                        <property name="left_attach">1</property>
++                                                        <property name="top_attach">0</property>
++                                                        <property name="width">1</property>
++                                                        <property name="height">1</property>
++                                                    </packing>
++                                                </child>
++                                                <child>
++                                                    <object class="GtkLabel" id="jid_label">
++                                                        <property name="xalign">0</property>
++                                                        <property name="yalign">0</property>
++                                                        <property name="selectable">True</property>
++                                                        <property name="expand">True</property>
++                                                        <property name="visible">True</property>
++                                                    </object>
++                                                    <packing>
++                                                        <property name="left_attach">1</property>
++                                                        <property name="top_attach">1</property>
++                                                        <property name="width">1</property>
++                                                        <property name="height">1</property>
++                                                    </packing>
++                                                </child>
++                                                <child>
++                                                    <object class="GtkLabel" id="account_label">
++                                                        <property name="xalign">1</property>
++                                                        <property name="yalign">1</property>
++                                                        <property name="margin">5</property>
++                                                        <property name="expand">True</property>
++                                                        <property name="visible">True</property>
++                                                    </object>
++                                                    <packing>
++                                                        <property name="left_attach">1</property>
++                                                        <property name="top_attach">2</property>
++                                                        <property name="width">1</property>
++                                                        <property name="height">1</property>
++                                                    </packing>
++                                                </child>
+                                             </object>
+-                                            <packing>
+-                                                <property name="left_attach">1</property>
+-                                                <property name="top_attach">0</property>
+-                                                <property name="width">1</property>
+-                                                <property name="height">1</property>
+-                                            </packing>
+                                         </child>
+                                         <child>
+-                                            <object class="GtkLabel" id="jid_label">
+-                                                <property name="xalign">0</property>
+-                                                <property name="yalign">0</property>
+-                                                <property name="selectable">True</property>
+-                                                <property name="expand">True</property>
++                                            <object class="GtkBox" id="main_box">
++                                                <property name="orientation">vertical</property>
+                                                 <property name="visible">True</property>
+                                             </object>
+-                                            <packing>
+-                                                <property name="left_attach">1</property>
+-                                                <property name="top_attach">1</property>
+-                                                <property name="width">1</property>
+-                                                <property name="height">1</property>
+-                                            </packing>
+                                         </child>
+-                                        <child>
+-                                            <object class="GtkLabel" id="account_label">
+-                                                <property name="xalign">1</property>
+-                                                <property name="yalign">1</property>
+-                                                <property name="margin">5</property>
+-                                                <property name="expand">True</property>
+-                                                <property name="visible">True</property>
+-                                            </object>
+-                                            <packing>
+-                                                <property name="left_attach">2</property>
+-                                                <property name="top_attach">1</property>
+-                                                <property name="width">1</property>
+-                                                <property name="height">1</property>
+-                                            </packing>
+-                                        </child>
+-                                    </object>
+-                                </child>
+-                                <child>
+-                                    <object class="GtkBox" id="main_box">
+-                                        <property name="orientation">vertical</property>
+-                                        <property name="margin-right">100</property>
+-                                        <property name="margin-left">100</property>
+-                                        <property name="visible">True</property>
+                                     </object>
+                                 </child>
+                             </object>
+diff --git a/main/data/conversation_content_view/view.ui b/main/data/conversation_content_view/view.ui
+index 17f753f5..47302e2f 100644
+--- a/main/data/conversation_content_view/view.ui
++++ b/main/data/conversation_content_view/view.ui
+@@ -4,6 +4,7 @@
+         <property name="expand">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">0</property>
++        <property name="width_request">350</property>
+         <property name="visible">True</property>
+         <child>
+             <object class="GtkStack" id="stack">
+diff --git a/main/data/emojichooser.ui b/main/data/emojichooser.ui
+index d47a2c22..473820a6 100644
+--- a/main/data/emojichooser.ui
++++ b/main/data/emojichooser.ui
+@@ -187,7 +187,7 @@
+                   </object>
+                 </child>
+                 <child>
+-                  <object class="GtkBox">
++                  <object class="GtkGrid">
+                     <property name="visible">1</property>
+                     <!-- Remember to keep tooltips here in sync with section headings above -->
+                     <child>
+@@ -204,6 +204,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">0</property>
++                        <property name="top_attach">0</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="people.button">
+@@ -219,6 +223,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">1</property>
++                        <property name="top_attach">0</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="body.button">
+@@ -234,6 +242,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">2</property>
++                        <property name="top_attach">0</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="nature.button">
+@@ -249,6 +261,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">3</property>
++                        <property name="top_attach">0</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="food.button">
+@@ -264,6 +280,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">4</property>
++                        <property name="top_attach">0</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="travel.button">
+@@ -279,6 +299,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">0</property>
++                        <property name="top_attach">1</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="activities.button">
+@@ -294,6 +318,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">1</property>
++                        <property name="top_attach">1</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="objects.button">
+@@ -309,6 +337,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">2</property>
++                        <property name="top_attach">1</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="symbols.button">
+@@ -324,6 +356,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">3</property>
++                        <property name="top_attach">1</property>
++                      </packing>
+                     </child>
+                     <child>
+                       <object class="GtkButton" id="flags.button">
+@@ -339,6 +375,10 @@
+                           </object>
+                         </child>
+                       </object>
++                      <packing>
++                        <property name="left_attach">4</property>
++                        <property name="top_attach">1</property>
++                      </packing>
+                     </child>
+                   </object>
+                 </child>
+diff --git a/main/data/im.dino.Dino.appdata.xml.in b/main/data/im.dino.Dino.appdata.xml.in
+index c95ef12e..180b7873 100644
+--- a/main/data/im.dino.Dino.appdata.xml.in
++++ b/main/data/im.dino.Dino.appdata.xml.in
+@@ -45,5 +45,11 @@
+       </description>
+     </release>
+   </releases>
+-  -->
+-</component>
++  --> 
++  
++    <custom>
++        <value key="Purism::form_factor">workstation</value>
++        <value key="Purism::form_factor">mobile</value>
++    </custom>
++  
++ </component>
+diff --git a/main/data/im.dino.Dino.desktop b/main/data/im.dino.Dino.desktop
+index 90f3e38f..66faaa82 100644
+--- a/main/data/im.dino.Dino.desktop
++++ b/main/data/im.dino.Dino.desktop
+@@ -11,3 +11,4 @@ Type=Application
+ Categories=GTK;Network;Chat;InstantMessaging;
+ X-GNOME-UsesNotifications=true
+ MimeType=x-scheme-handler/xmpp;
++X-Purism-FormFactor=Workstation;Mobile;
+diff --git a/main/data/theme.css b/main/data/theme.css
+index 3e076248..897e4cc9 100644
+--- a/main/data/theme.css
++++ b/main/data/theme.css
+@@ -74,6 +74,11 @@ window.dino-main .dino-sidebar > frame {
+     border-bottom: 1px solid @borders;
+ }
+ 
++window.dino-main list.sidebar {
++    border-left: 0px;
++    border-right: 0px;
++}
++
+ .message-box {
+     transition: background .05s ease;
+ }
+diff --git a/main/data/unified_main_content.ui b/main/data/unified_main_content.ui
+index 03c206c1..e16bc4a8 100644
+--- a/main/data/unified_main_content.ui
++++ b/main/data/unified_main_content.ui
+@@ -1,12 +1,14 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <interface>
+-    <object class="GtkPaned" id="paned">
+-        <property name="position">300</property>
++    <object class="HdyLeaflet" id="paned">
+         <property name="orientation">horizontal</property>
+         <property name="visible">True</property>
++        <property name="can_focus">False</property>
++        <property name="transition-type">slide</property>
+         <child>
+             <object class="GtkStack" id="left_stack">
+                 <property name="visible">True</property>
++                <property name="hexpand">False</property>
+                 <child>
+                     <object class="GtkScrolledWindow" id="scrolled">
+                         <property name="expand">True</property>
+@@ -29,6 +31,7 @@
+                         <property name="valign">start</property>
+                         <property name="halign">start</property>
+                         <property name="visible">True</property>
++                        <property name="width_request">260</property>
+                         <child>
+                             <object class="GtkImage" id="conversation_list_placeholder_image">
+                                 <property name="visible">True</property>
+@@ -44,7 +47,9 @@
+                                 <property name="margin-top">70</property>
+                                 <property name="margin-right">50</property>
+                                 <property name="visible">True</property>
++                                <property name="xalign">0</property>
+                                 <property name="valign">end</property>
++                                <property name="max-width-chars">0</property>
+                                 <property name="label" translatable="yes">Click here to start a conversation or join a channel.</property>
+                                 <style>
+                                     <class name="dim-label"/>
+@@ -58,10 +63,18 @@
+                 </child>
+             </object>
+             <packing>
+-                <property name="resize">False</property>
+-                <property name="shrink">False</property>
++                <property name="name">list-pane</property>
+             </packing>
+         </child>
++        <child>
++            <object class="GtkSeparator" id="paned_separator">
++                <property name="orientation">vertical</property>
++                <property name="visible">True</property>
++                <style>
++                    <class name="sidebar"/>
++                </style>
++            </object>
++        </child>
+         <child>
+             <object class="GtkOverlay">
+                 <property name="visible">True</property>
+@@ -139,8 +152,7 @@
+                 </child>
+             </object>
+             <packing>
+-                <property name="resize">True</property>
+-                <property name="shrink">False</property>
++                <property name="name">view-pane</property>
+             </packing>
+         </child>
+     </object>
+diff --git a/main/src/ui/add_conversation/add_conference_dialog.vala b/main/src/ui/add_conversation/add_conference_dialog.vala
+index a03f3db6..dfe877ec 100644
+--- a/main/src/ui/add_conversation/add_conference_dialog.vala
++++ b/main/src/ui/add_conversation/add_conference_dialog.vala
+@@ -35,6 +35,8 @@ public class AddConferenceDialog : Gtk.Dialog {
+         setup_jid_add_view();
+         setup_conference_details_view();
+         show_jid_add_view();
++
++        set_default_size(400, 520);
+     }
+ 
+     private void show_jid_add_view() {
+diff --git a/main/src/ui/add_conversation/select_contact_dialog.vala b/main/src/ui/add_conversation/select_contact_dialog.vala
+index d78a17c1..6be7cf3b 100644
+--- a/main/src/ui/add_conversation/select_contact_dialog.vala
++++ b/main/src/ui/add_conversation/select_contact_dialog.vala
+@@ -27,6 +27,8 @@ public class SelectContactDialog : Gtk.Dialog {
+ 
+         setup_view();
+         setup_headerbar();
++
++        set_default_size(400, 520);
+     }
+ 
+     public void set_filter(string str) {
+diff --git a/main/src/ui/contact_details/dialog.vala b/main/src/ui/contact_details/dialog.vala
+index f29d068e..fe21cbba 100644
+--- a/main/src/ui/contact_details/dialog.vala
++++ b/main/src/ui/contact_details/dialog.vala
+@@ -85,11 +85,11 @@ public class Dialog : Gtk.Dialog {
+         ListBoxRow list_row = new ListBoxRow() { activatable=false, visible=true };
+         Box row = new Box(Orientation.HORIZONTAL, 20) { margin_start=15, margin_end=15, margin_top=3, margin_bottom=3, visible=true };
+         list_row.add(row);
+-        Label label_label = new Label(label) { xalign=0, yalign=0.5f, hexpand=true, visible=true };
++        Label label_label = new Label(label) { xalign=0, yalign=0.5f, hexpand=true, wrap=true, visible=true };
+         if (description != null && description != "") {
+             Box box = new Box(Orientation.VERTICAL, 0) { visible=true };
+             box.add(label_label);
+-            Label desc_label = new Label("") { xalign=0, yalign=0.5f, hexpand=true, visible=true };
++            Label desc_label = new Label("") { xalign=0, yalign=0.5f, hexpand=true, wrap=true, visible=true };
+             desc_label.set_markup("<span size='small'>%s</span>".printf(Markup.escape_text(description)));
+             desc_label.get_style_context().add_class("dim-label");
+             box.add(desc_label);
+@@ -117,7 +117,7 @@ public class Dialog : Gtk.Dialog {
+ 
+         int pref_height, pref_width;
+         get_content_area().get_preferred_height(null, out pref_height);
+-        get_preferred_width(out pref_width, null);
++        get_default_size(out pref_width, null);
+         resize(pref_width, int.min(500, pref_height));
+     }
+ 
+diff --git a/main/src/ui/conversation_titlebar/conversation_titlebar.vala b/main/src/ui/conversation_titlebar/conversation_titlebar.vala
+index 60d8286b..e7455cab 100644
+--- a/main/src/ui/conversation_titlebar/conversation_titlebar.vala
++++ b/main/src/ui/conversation_titlebar/conversation_titlebar.vala
+@@ -10,6 +10,10 @@ public interface ConversationTitlebar : Widget {
+     public abstract string? subtitle { get; set; }
+     public abstract string? title { get; set; }
+ 
++    public abstract bool back_button { get; set; }
++
++    public signal void back_pressed();
++
+     public abstract void insert_entry(Plugins.ConversationTitlebarEntry entry);
+ }
+ 
+@@ -28,6 +32,12 @@ public class ConversationTitlebarNoCsd : ConversationTitlebar, Gtk.Box {
+         }
+     }
+ 
++    private Revealer back_revealer;
++    public bool back_button {
++        get { return back_revealer.reveal_child; }
++        set { back_revealer.reveal_child = value; }
++    }
++
+     private Box widgets_box = new Box(Orientation.HORIZONTAL, 0) { margin_start=15, valign=Align.END, visible=true };
+     private Label title_label = new Label("") { ellipsize=EllipsizeMode.END, visible=true };
+     private Label subtitle_label = new Label("") { use_markup=true, ellipsize=EllipsizeMode.END, visible=false };
+@@ -36,8 +46,17 @@ public class ConversationTitlebarNoCsd : ConversationTitlebar, Gtk.Box {
+         Box content_box = new Box(Orientation.HORIZONTAL, 0) { margin=5, margin_start=15, margin_end=10, hexpand=true, visible=true };
+         this.add(content_box);
+ 
++        back_revealer = new Revealer() { visible = true, transition_type = RevealerTransitionType.SLIDE_RIGHT, transition_duration = 200, can_focus = false, reveal_child = false };
++        Button back_button = new Button.from_icon_name("go-previous-symbolic") { visible = true, valign = Align.CENTER, use_underline = true, relief = ReliefStyle.NONE };
++        back_button.get_style_context().add_class("image-button");
++        back_button.clicked.connect(() => back_pressed());
++        back_revealer.add(back_button);
++        content_box.add(back_revealer);
++
+         Box titles_box = new Box(Orientation.VERTICAL, 0) { valign=Align.CENTER, hexpand=true, visible=true };
+-        content_box.add(titles_box);
++        ScrolledWindow titles_scroll = new ScrolledWindow(null, null) { vscrollbar_policy=NEVER, hscrollbar_policy=NEVER, visible=true };
++        titles_scroll.add(titles_box);
++        content_box.add(titles_scroll);
+ 
+         titles_box.add(title_label);
+         subtitle_label.attributes = new AttrList();
+@@ -65,11 +84,22 @@ public class ConversationTitlebarCsd : ConversationTitlebar, Gtk.HeaderBar {
+ 
+     public new string? title { get { return this.get_title(); } set { base.set_title(value); } }
+     public new string? subtitle { get { return this.get_subtitle(); } set { base.set_subtitle(value); } }
++    private Revealer back_revealer;
++    public bool back_button {
++        get { return back_revealer.reveal_child; }
++        set { back_revealer.reveal_child = value; }
++    }
+ 
+     public ConversationTitlebarCsd() {
+         this.get_style_context().add_class("dino-right");
+         show_close_button = true;
+         hexpand = true;
++        back_revealer = new Revealer() { visible = true, transition_type = RevealerTransitionType.SLIDE_RIGHT, transition_duration = 200, can_focus = false, reveal_child = false };
++        Button back_button = new Button.from_icon_name("go-previous-symbolic") { visible = true, valign = Align.CENTER, use_underline = true };
++        back_button.get_style_context().add_class("image-button");
++        back_button.clicked.connect(() => back_pressed());
++        back_revealer.add(back_button);
++        this.pack_start(back_revealer);
+     }
+ 
+     public void insert_entry(Plugins.ConversationTitlebarEntry entry) {
+@@ -77,6 +107,16 @@ public class ConversationTitlebarCsd : ConversationTitlebar, Gtk.HeaderBar {
+         Button gtk_widget = (Gtk.Button)widget;
+         this.pack_end(gtk_widget);
+     }
++
++    /*
++     * HdyLeaflet collapses based on natural_width, but labels set natural_width to the width required to have the full
++     * text in a single line, thus if the label gets longer, HdyLeaflet would collapse. Work around is to just use the
++     * minimum_width as natural_width.
++     */
++    public override void get_preferred_width(out int minimum_width, out int natural_width) {
++        base.get_preferred_width(out minimum_width, out natural_width);
++        natural_width = minimum_width;
++    }
+ }
+ 
+ }
+diff --git a/main/src/ui/main_window.vala b/main/src/ui/main_window.vala
+index 04c01b26..14563c28 100644
+--- a/main/src/ui/main_window.vala
++++ b/main/src/ui/main_window.vala
+@@ -22,8 +22,10 @@ public class MainWindow : Gtk.Window {
+     public ConversationListTitlebarCsd conversation_list_titlebar_csd;
+     public HeaderBar placeholder_headerbar = new HeaderBar() { title="Dino", show_close_button=true, visible=true };
+     public Box box = new Box(Orientation.VERTICAL, 0) { orientation=Orientation.VERTICAL, visible=true };
+-    public Paned headerbar_paned = new Paned(Orientation.HORIZONTAL) { visible=true };
+-    public Paned paned;
++    public Hdy.Leaflet headerbar_paned = new Hdy.Leaflet() { visible=true };
++    public Hdy.TitleBar titlebar = new Hdy.TitleBar() { visible=true };
++    public Hdy.HeaderGroup headergroup = new Hdy.HeaderGroup();
++    public Hdy.Leaflet paned;
+     public Revealer search_revealer;
+     public SearchEntry search_entry;
+     public GlobalSearch search_box;
+@@ -44,23 +46,33 @@ public class MainWindow : Gtk.Window {
+         restore_window_size();
+ 
+         this.get_style_context().add_class("dino-main");
+-        setup_headerbar();
+-        Gtk.Settings.get_default().notify["gtk-decoration-layout"].connect(set_window_buttons);
+-        this.realize.connect(set_window_buttons);
+         setup_unified();
++        setup_headerbar();
+         setup_stack();
+ 
+-        paned.bind_property("position", headerbar_paned, "position", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
++        if (!Util.use_csd()) {
++            box.add(headerbar_paned);
++            box.add(new Separator(Orientation.VERTICAL) { visible = true });
++        }
++        box.add(paned);
++
++        paned.bind_property("transition-type", headerbar_paned, "transition-type", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
++        paned.bind_property("mode-transition-duration", headerbar_paned, "mode-transition-duration", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
++        paned.bind_property("child-transition-duration", headerbar_paned, "child-transition-duration", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
++        paned.bind_property("visible-child-name", headerbar_paned, "visible-child-name", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
++
++        headerbar_paned.bind_property("folded", headergroup, "decorate-all", BindingFlags.SYNC_CREATE);
+     }
+ 
+     private void setup_unified() {
+         Builder builder = new Builder.from_resource("/im/dino/Dino/unified_main_content.ui");
+-        paned = (Paned) builder.get_object("paned");
+-        box.add(paned);
++        paned = (Hdy.Leaflet) builder.get_object("paned");
++        paned.notify["folded"].connect_after(() => update_headerbar());
+         left_stack = (Stack) builder.get_object("left_stack");
+         right_stack = (Stack) builder.get_object("right_stack");
+         conversation_view = (ConversationView) builder.get_object("conversation_view");
+         conversation_selector = ((ConversationSelector) builder.get_object("conversation_list")).init(stream_interactor);
++        conversation_selector.conversation_selected.connect_after(() => show_view_pane());
+         search_box = ((GlobalSearch) builder.get_object("search_box")).init(stream_interactor);
+         search_revealer = (Revealer) builder.get_object("search_revealer");
+         search_entry = (SearchEntry) builder.get_object("search_entry");
+@@ -68,35 +80,60 @@ public class MainWindow : Gtk.Window {
+         conversation_list_placeholder_image.set_from_pixbuf(new Pixbuf.from_resource("/im/dino/Dino/icons/dino-conversation-list-placeholder-arrow.svg"));
+     }
+ 
++    private void update_headerbar() {
++        conversation_titlebar.back_button = paned.folded;
++    }
++
++    private void show_list_pane() {
++        paned.visible_child_name = "list-pane";
++        if (paned.folded) {
++            conversation_selector.unselect_row(conversation_selector.get_selected_row());
++        }
++    }
++
++    private void show_view_pane() {
++        paned.visible_child_name = "view-pane";
++    }
++
+     private void setup_headerbar() {
++        SizeGroup conversation_list_group = new SizeGroup(SizeGroupMode.HORIZONTAL);
++        conversation_list_group.add_widget(left_stack);
++        SizeGroup conversation_view_group = new SizeGroup(SizeGroupMode.HORIZONTAL);
++        conversation_view_group.add_widget(right_stack);
+         if (Util.use_csd()) {
+             conversation_list_titlebar_csd = new ConversationListTitlebarCsd() { visible=true };
+-            headerbar_paned.pack1(conversation_list_titlebar_csd, false, false);
++            headerbar_paned.add_with_properties(conversation_list_titlebar_csd, "name", "list-pane");
++            headergroup.add_gtk_header_bar(conversation_list_titlebar_csd);
++            conversation_list_group.add_widget(conversation_list_titlebar_csd);
++
++            Separator sep = new Separator(Orientation.HORIZONTAL) { visible = true };
++            sep.get_style_context().add_class("sidebar");
++            headerbar_paned.add(sep);
+ 
+             conversation_titlebar_csd = new ConversationTitlebarCsd() { visible=true };
++            conversation_titlebar_csd.back_pressed.connect(() => show_list_pane());
+             conversation_titlebar = conversation_titlebar_csd;
+-            headerbar_paned.pack2(conversation_titlebar_csd, true, false);
++            headerbar_paned.add_with_properties(conversation_titlebar_csd, "name", "view-pane");
++            headergroup.add_gtk_header_bar(conversation_titlebar_csd);
++            conversation_view_group.add_widget(conversation_titlebar);
++
++            titlebar.add(headerbar_paned);
+         } else {
+             ConversationListTitlebar conversation_list_titlebar = new ConversationListTitlebar() { visible=true };
+-            headerbar_paned.pack1(conversation_list_titlebar, false, false);
++            headerbar_paned.add_with_properties(conversation_list_titlebar, "name", "list-pane");
++            conversation_list_group.add_widget(conversation_list_titlebar);
+ 
+-            conversation_titlebar = new ConversationTitlebarNoCsd() { visible=true };
+-            headerbar_paned.pack2(conversation_titlebar, true, false);
++            Separator sep = new Separator(Orientation.HORIZONTAL) { visible = true };
++            sep.get_style_context().add_class("sidebar");
++            headerbar_paned.add(sep);
+ 
+-            box.add(headerbar_paned);
++            conversation_titlebar = new ConversationTitlebarNoCsd() { visible=true };
++            conversation_titlebar.back_pressed.connect(() => show_list_pane());
++            headerbar_paned.add_with_properties(conversation_titlebar, "name", "view-pane");
++            conversation_view_group.add_widget(conversation_titlebar);
+         }
+     }
+ 
+-    private void set_window_buttons() {
+-        if (!Util.use_csd()) return;
+-        Gtk.Settings? gtk_settings = Gtk.Settings.get_default();
+-        if (gtk_settings == null) return;
+-
+-        string[] buttons = gtk_settings.gtk_decoration_layout.split(":");
+-        this.conversation_list_titlebar_csd.decoration_layout = buttons[0] + ":";
+-        this.conversation_titlebar_csd.decoration_layout = ((buttons.length == 2) ? ":" + buttons[1] : "");
+-    }
+-
+     private void setup_stack() {
+         stack.add_named(box, "main");
+         stack.add_named(welcome_placeholder, "welcome_placeholder");
+@@ -118,7 +155,7 @@ public class MainWindow : Gtk.Window {
+ 
+             stack.set_visible_child_name("main");
+             if (Util.use_csd()) {
+-                set_titlebar(headerbar_paned);
++                set_titlebar(titlebar);
+             }
+         } else if (stack_state == StackState.CLEAN_START || stack_state == StackState.NO_ACTIVE_ACCOUNTS) {
+             if (stack_state == StackState.CLEAN_START) {
+@@ -134,7 +171,7 @@ public class MainWindow : Gtk.Window {
+             left_stack.set_visible_child_name("placeholder");
+             right_stack.set_visible_child_name("placeholder");
+             if (Util.use_csd()) {
+-                set_titlebar(headerbar_paned);
++                set_titlebar(titlebar);
+             }
+         }
+     }
+diff --git a/plugins/omemo/data/contact_details_dialog.ui b/plugins/omemo/data/contact_details_dialog.ui
+index 188bf06e..d9a35e97 100644
+--- a/plugins/omemo/data/contact_details_dialog.ui
++++ b/plugins/omemo/data/contact_details_dialog.ui
+@@ -2,7 +2,6 @@
+ <interface>
+     <template class="DinoPluginsOmemoContactDetailsDialog">
+         <property name="modal">True</property>
+-        <property name="resizable">False</property>
+         <child internal-child="vbox">
+             <object class="GtkBox">
+                 <property name="visible">True</property>
+@@ -37,6 +36,8 @@
+                                                             <object class="GtkLabel" id="automatically_accept_new_label">
+                                                                 <property name="visible">True</property>
+                                                                 <property name="halign">start</property>
++                                                                <property name="xalign">0</property>
++                                                                <property name="wrap">True</property>
+                                                                 <attributes>
+                                                                     <attribute name="scale" value="1.1"/>
+                                                                 </attributes>
+@@ -114,8 +115,10 @@
+                                                             <object class="GtkLabel" id="own_fingerprint_label">
+                                                                 <property name="visible">True</property>
+                                                                 <property name="halign">start</property>
+-                                                                <property name="justify">right</property>
+                                                                 <property name="hexpand">True</property>
++                                                                <property name="max_width_chars">35</property>
++                                                                <property name="xalign">0</property>
++                                                                <property name="wrap">True</property>
+                                                             </object>
+                                                         </child>
+                                                         <child>
+diff --git a/plugins/omemo/src/ui/contact_details_dialog.vala b/plugins/omemo/src/ui/contact_details_dialog.vala
+index b268cc13..a714b717 100644
+--- a/plugins/omemo/src/ui/contact_details_dialog.vala
++++ b/plugins/omemo/src/ui/contact_details_dialog.vala
+@@ -288,7 +288,7 @@ public class ContactDetailsDialog : Gtk.Dialog {
+ public class FingerprintRow : ListBoxRow {
+ 
+     private Image trust_image = new Image() { visible = true, halign = Align.END, icon_size = IconSize.BUTTON };
+-    private Label fingerprint_label = new Label("") { use_markup=true, justify=Justification.RIGHT, visible=true, halign = Align.START, valign = Align.CENTER, hexpand = false };
++    private Label fingerprint_label = new Label("") { use_markup=true, max_width_chars=35, wrap=true, visible=true, halign = Align.START, valign = Align.CENTER, hexpand = false, xalign = 0 };
+     private Label trust_label = new Label(null) { visible = true, hexpand = true, xalign = 0 };
+ 
+     public Row row;
+diff --git a/plugins/omemo/src/ui/util.vala b/plugins/omemo/src/ui/util.vala
+index cf61ed82..0b0c4a9f 100644
+--- a/plugins/omemo/src/ui/util.vala
++++ b/plugins/omemo/src/ui/util.vala
+@@ -51,9 +51,8 @@ public static string fingerprint_markup(string s) {
+             b = (uint8) (b * factor);
+         }
+ 
+-        if (i % 32 == 0 && i != 0) markup += "\n";
+         markup += @"<span foreground=\"$("#%02x%02x%02x".printf(r, g, b))\">$four_chars</span>";
+-        if (i % 8 == 4 && i % 32 != 28) markup += " ";
++        if (i % 8 == 4) markup += " ";
+     }
+ 
+     return "<span font_family='monospace' font='8'>" + markup + "</span>";
diff --git a/repo/edk2/0008-BaseTools-do-not-build-BrotliCompress-RH-only.patch b/repo/edk2/0008-BaseTools-do-not-build-BrotliCompress-RH-only.patch
new file mode 100644
index 0000000..78d65ea
--- /dev/null
+++ b/repo/edk2/0008-BaseTools-do-not-build-BrotliCompress-RH-only.patch
@@ -0,0 +1,43 @@
+From dca56cf4d28bbbb1d3be029ce9a6710cb3f6cd2f Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Thu, 4 Jun 2020 13:34:12 +0200
+Subject: BaseTools: do not build BrotliCompress (RH only)
+
+Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] ->
+RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase:
+
+- no change
+
+Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] ->
+RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase:
+
+- New patch.
+
+BrotliCompress is not used for building ArmVirtPkg or OvmfPkg platforms.
+It depends on one of the upstream Brotli git submodules that we removed
+earlier in this rebase series. (See patch "remove upstream edk2's Brotli
+submodules (RH only").
+
+Do not attempt to build BrotliCompress.
+
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+(cherry picked from commit db8ccca337e2c5722c1d408d2541cf653d3371a2)
+---
+ BaseTools/Source/C/GNUmakefile | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/BaseTools/Source/C/GNUmakefile b/BaseTools/Source/C/GNUmakefile
+index 8c191e0c38..3eae824a1c 100644
+--- a/BaseTools/Source/C/GNUmakefile
++++ b/BaseTools/Source/C/GNUmakefile
+@@ -48,7 +48,6 @@ all: makerootdir subdirs
+ LIBRARIES = Common
+ VFRAUTOGEN = VfrCompile/VfrLexer.h
+ APPLICATIONS = \
+-  BrotliCompress \
+   VfrCompile \
+   EfiRom \
+   GenFfs \
+-- 
+2.27.0
+
diff --git a/repo/edk2/0009-MdeModulePkg-remove-package-private-Brotli-include-p.patch b/repo/edk2/0009-MdeModulePkg-remove-package-private-Brotli-include-p.patch
new file mode 100644
index 0000000..6046944
--- /dev/null
+++ b/repo/edk2/0009-MdeModulePkg-remove-package-private-Brotli-include-p.patch
@@ -0,0 +1,49 @@
+From 9729dd1d6b83961d531e29777d0cc4a610b108be Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Thu, 4 Jun 2020 13:39:08 +0200
+Subject: MdeModulePkg: remove package-private Brotli include path (RH only)
+
+Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] ->
+RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase:
+
+- no change
+
+Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] ->
+RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase:
+
+- New patch.
+
+Originating from upstream commit 58802e02c41b
+("MdeModulePkg/BrotliCustomDecompressLib: Make brotli a submodule",
+2020-04-16), "MdeModulePkg/MdeModulePkg.dec" contains a package-internal
+include path into a Brotli submodule.
+
+The edk2 build system requires such include paths to resolve successfully,
+regardless of the firmware platform being built. Because
+BrotliCustomDecompressLib is not consumed by any OvmfPkg or ArmVirtPkg
+platforms, and we've removed the submodule earlier in this patch set,
+remove the include path too.
+
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+(cherry picked from commit e05e0de713c4a2b8adb6ff9809611f222bfe50ed)
+---
+ MdeModulePkg/MdeModulePkg.dec | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
+index 8d38383915..ba2d0290e7 100644
+--- a/MdeModulePkg/MdeModulePkg.dec
++++ b/MdeModulePkg/MdeModulePkg.dec
+@@ -24,9 +24,6 @@
+ [Includes]
+   Include
+ 
+-[Includes.Common.Private]
+-  Library/BrotliCustomDecompressLib/brotli/c/include
+-
+ [LibraryClasses]
+   ##  @libraryclass  Defines a set of methods to reset whole system.
+   ResetSystemLib|Include/Library/ResetSystemLib.h
+-- 
+2.27.0
+
diff --git a/repo/edk2/build-hack.patch b/repo/edk2/build-hack.patch
new file mode 100644
index 0000000..98d7c12
--- /dev/null
+++ b/repo/edk2/build-hack.patch
@@ -0,0 +1,13 @@
+VfrCompile seg.faults with fortify enabled. It's probably broken.
+
+diff -ru a/edk2-e242cdfb307a6dfe2c0f75c4719f5c1f6b418625/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp b/edk2-e242cdfb307a6dfe2c0f75c4719f5c1f6b418625/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
+--- edk2-e242cdfb307a6dfe2c0f75c4719f5c1f6b418625/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp	2016-11-16 10:01:14.000000000 +0200
++++ edk2-e242cdfb307a6dfe2c0f75c4719f5c1f6b418625/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp	2016-11-16 14:47:30.211978076 +0200
+@@ -13,6 +13,7 @@
+ 
+ **/
+ 
++#define _FORTIFY_SOURCE 0
+ #include "stdio.h"
+ #include "stdlib.h"
+ #include "CommonLib.h"
diff --git a/repo/edk2/disable-werror.patch b/repo/edk2/disable-werror.patch
new file mode 100644
index 0000000..73f19d4
--- /dev/null
+++ b/repo/edk2/disable-werror.patch
@@ -0,0 +1,11 @@
+--- ./BaseTools/Source/C/Makefiles/header.makefile.orig
++++ ./BaseTools/Source/C/Makefiles/header.makefile
+@@ -73,7 +73,7 @@
+ -Wno-deprecated-declarations -Wno-self-assign -Wno-unused-result -nostdlib -g
+ else
+ BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
+--fno-delete-null-pointer-checks -Wall -Werror \
++-fno-delete-null-pointer-checks -Wall \
+ -Wno-deprecated-declarations -Wno-stringop-truncation -Wno-restrict \
+ -Wno-unused-result -nostdlib -g
+ endif
diff --git a/repo/edk2/edk2-ovmf.xibuild b/repo/edk2/edk2-ovmf.xibuild
new file mode 100644
index 0000000..eec9426
--- /dev/null
+++ b/repo/edk2/edk2-ovmf.xibuild
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+DESC="Open Virtual Machine Firmware (OVMF) BIOS"
+
+build () {
+    echo "skip"
+}
+
+package () {
+	for fw in "$BUILD_ROOT"/Build/*/"$RELEASE"_"$TOOLCHAIN"/FV/*.fd; do
+		install -D $fw "$PKG_DEST"/usr/share/OVMF/${fw##*/}
+	done
+
+	# dont ship memfd for now to save space
+	rm -f "$PKG_DEST"/usr/share/OVMF/MEMFD.fd
+
+	install -d "$PKG_DEST"/usr/share/ovmf
+	ln -sf ../OVMF/OVMF.fd "$PKG_DEST"/usr/share/ovmf/bios.bin
+}
diff --git a/repo/edk2/edk2.xibuild b/repo/edk2/edk2.xibuild
new file mode 100644
index 0000000..d4deb4a
--- /dev/null
+++ b/repo/edk2/edk2.xibuild
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+NAME="edk2"
+DESC="EFI Development Kit II"
+
+MAKEDEPS=" bash python iasl nasm util-linux util-linux-misc"
+
+PKG_VER=0.0.202202
+_realver=edk2-stable${PKG_VER##*.}
+_sslver=1.1.1n
+_sfver=3e
+SOURCE="https://github.com/tianocore/edk2/archive/$_realver.tar.gz"
+
+ADDITIONAL="
+https://www.openssl.org/source/openssl-$_sslver.tar.gz
+http://www.jhauser.us/arithmetic/SoftFloat-$_sfver.zip
+0008-BaseTools-do-not-build-BrotliCompress-RH-only.patch
+0009-MdeModulePkg-remove-package-private-Brotli-include-p.patch
+build-hack.patch
+disable-werror.patch
+"
+
+TARGET_ARCH=X64
+PLATFORM=OvmfPkg/OvmfPkgX64.dsc
+
+TOOLCHAIN=GCC5
+RELEASE=RELEASE
+
+
+prepare() {
+	# unix line endings for the files to be patched
+	sed -e 's/\r$//' -i BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp \
+		BaseTools/Source/C/VolInfo/VolInfo.c
+	rm -rf CryptoPkg/Library/OpensslLib/openssl
+	ln -s "$BUILD_ROOT"/openssl-$_sslver CryptoPkg/Library/OpensslLib/openssl
+	rm -rf ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3
+	ln -s "$BUILD_ROOT"/SoftFloat-$_sfver \
+		ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3
+	apply_patches
+}
+
+build() {
+	export WORKSPACE=$PWD
+	export PACKAGES_PATH=$PWD
+	export EDK_TOOLS_PATH=$PWD/BaseTools/
+	export PATH=$PWD/BaseTools/BinWrappers/PosixLike/:$PATH
+	# parallel build fails
+	unset MAKEFLAGS
+
+	bash -c ". edksetup.sh"
+	make -C BaseTools
+
+	msg "Building Plaform Files"
+	command build -b $RELEASE \
+		-a $TARGET_ARCH  \
+		-t $TOOLCHAIN \
+		-p $PLATFORM \
+		-n ${JOBS:-2}
+}
+
+package() {
+	mkdir -p "$PKG_DEST"/usr/bin \
+		"$PKG_DEST"/usr/share/edk2/Conf \
+		"$PKG_DEST"/usr/share/edk2/Scripts
+
+	install BaseTools/Source/C/bin/* BaseTools/BinWrappers/PosixLike/LzmaF86Compress \
+		"$PKG_DEST"/usr/bin
+	install BaseTools/BuildEnv "$PKG_DEST"/usr/share/edk2/
+	install BaseTools/Conf/*.template "$PKG_DEST"/usr/share/edk2/Conf
+	install BaseTools/Scripts/GccBase.lds "$PKG_DEST"/usr/share/edk2/Scripts
+
+	for i in $(find BaseTools/Source/Python -type d -maxdepth 1); do
+		local mod=${i##*/}
+		test -f "$i/$mod.py" || continue
+		cp -R BaseTools/Source/Python/"$mod" "$PKG_DEST"/usr/share/edk2/Python/
+		cat <<- EOF > "$PKG_DEST"/usr/bin/"$mod".py
+		#!/bin/sh
+		export PYTHONPATH=/usr/share/edk2/Python
+		exec $PYTHON_COMMAND /usr/share/edk2/Python/$mod/$mod.py "\$@"
+		EOF
+		chmod +x "$PKG_DEST"/usr/bin/"$mod".py
+	done
+}
+
diff --git a/repo/hdparm/hdparm.xibuild b/repo/hdparm/hdparm.xibuild
new file mode 100644
index 0000000..12cff40
--- /dev/null
+++ b/repo/hdparm/hdparm.xibuild
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+NAME="hdparm"
+DESC="Utility for manipulating IDE device parameters"
+
+MAKEDEPS=" linux-headers"
+
+PKG_VER=9.63
+SOURCE="https://downloads.sourceforge.net/sourceforge/hdparm/hdparm-$PKG_VER.tar.gz"
+
+prepare() {
+	apply_patches
+	sed -i '/^LDFLAGS/d' "$BUILD_ROOT"/Makefile
+}
+
+build() {
+	export CFLAGS="$CFLAGS -D_GNU_SOURCE"
+	make
+}
+
+package() {
+	make DESTDIR="$PKG_DEST" install
+	install -D -m755 contrib/idectl "$PKG_DEST"/sbin
+	install -D -m755 contrib/ultrabayd "$PKG_DEST"/sbin
+	install -D -m644 LICENSE.TXT "$PKG_DEST"/usr/share/licenses/hdparm/LICENSE.TXT
+}
+
diff --git a/repo/i2c-tools/i2c-tools.xibuild b/repo/i2c-tools/i2c-tools.xibuild
index 27a8e72..6e9cd9a 100644
--- a/repo/i2c-tools/i2c-tools.xibuild
+++ b/repo/i2c-tools/i2c-tools.xibuild
@@ -36,3 +36,7 @@ package() {
 
 }
 
+postinstall () {
+    groupadd i2c
+    echo 'KERNEL=="i2c-[0-9]*", GROUP="i2c"' >> /etc/udev/rules.d/10-local_i2c_group.rules
+}
diff --git a/repo/imagemagick/imagemagick.xibuild b/repo/imagemagick/imagemagick.xibuild
index 216cf35..f809c5d 100644
--- a/repo/imagemagick/imagemagick.xibuild
+++ b/repo/imagemagick/imagemagick.xibuild
@@ -5,9 +5,9 @@ DESC="Collection of tools and libraries for many image formats"
 
 MAKEDEPS="chrpath fontconfig freetype2 ghostscript lcms2 libheif libjpeg-turbo libpng libjxl libtool libwebp libx11 libxext libxml2 perl tiff zlib librsvg"
 
-PKG_VER=7.1.0.30
+PKG_VER=7.1.0-45
 version=${PKG_VER%.*}-${PKG_VER##*.}
-SOURCE="https://download.imagemagick.org/ImageMagick/download/releases/ImageMagick-$version.tar.xz"
+SOURCE="https://imagemagick.org/archive/ImageMagick-$PKG_VER.tar.xz"
 
 build() {
 
diff --git a/repo/linux-firmware/linux-firmware.xibuild b/repo/linux-firmware/linux-firmware.xibuild
index 9bdb308..0bf7008 100644
--- a/repo/linux-firmware/linux-firmware.xibuild
+++ b/repo/linux-firmware/linux-firmware.xibuild
@@ -3,7 +3,7 @@
 MAKEDEPS=""
 DEPS="linux"
 
-PKG_VER=5.18.2
+PKG_VER=5.19
 SOURCE=https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
 BRANCH=02c69863c885db963f8c0121b533f2816ef5be3b
 
diff --git a/repo/linux-headers/linux-headers.xibuild b/repo/linux-headers/linux-headers.xibuild
index 77849f8..96f8b27 100644
--- a/repo/linux-headers/linux-headers.xibuild
+++ b/repo/linux-headers/linux-headers.xibuild
@@ -4,7 +4,7 @@ MAKEDEPS="make cpio bc perl libelf kmod xmlto xz"
 DEPS="pahole"
 DESC="Linux kernel headers"
 
-PKG_VER=5.18.3
+PKG_VER=5.19
 SOURCE=https://cdn.kernel.org/pub/linux/kernel/v${PKG_VER%%.*}.x/linux-$PKG_VER.tar.xz
 
 build () {
diff --git a/repo/linux-libre/linux-libre-src.xibuild b/repo/linux-libre/linux-libre-src.xibuild
index 3ce3796..41e325e 100644
--- a/repo/linux-libre/linux-libre-src.xibuild
+++ b/repo/linux-libre/linux-libre-src.xibuild
@@ -5,7 +5,7 @@ DESC="$DESC (source)"
 package () {
     srcdir=$PKG_DEST/usr/src/
     mkdir -p $srcdir
-    tar -xf linux-$PKG_VER.tar.xz -C $srcdir
+    tar -xf linux-libre-$PKG_VER-gnu.tar.xz -C $srcdir
     make -C $srcdir/linux-$PKG_VER mrproper
     cp config $srcdir/linux-$PKG_VER/.config
     make -C $srcdir/linux-$PKG_VER olddefconfig
diff --git a/repo/linux-libre/linux-libre.xibuild b/repo/linux-libre/linux-libre.xibuild
index b3c10cf..8e7eac4 100644
--- a/repo/linux-libre/linux-libre.xibuild
+++ b/repo/linux-libre/linux-libre.xibuild
@@ -3,20 +3,20 @@
 MAKEDEPS="make bc linux-headers cpio"
 DEPS="sbase kmod"
 
-PKG_VER=5.18.6
-SOURCE=https://cdn.kernel.org/pub/linux/kernel/v${PKG_VER%%.*}.x/linux-$PKG_VER.tar.xz
+PKG_VER=5.19
+#SOURCE=https://cdn.kernel.org/pub/linux/kernel/v${PKG_VER%%.*}.x/linux-$PKG_VER.tar.xz
+SOURCE=https://linux-libre.fsfla.org/pub/linux-libre/releases/LATEST-${PKG_VER%%.*}.N/linux-libre-${PKG_VER}-gnu.tar.xz
 ADDITIONAL="
     fix-sbase-coreutils.patch
     config
-    https://linux-libre.fsfla.org/pub/linux-libre/releases/$PKG_VER-gnu/deblob-${PKG_VER%.*}
-    https://linux-libre.fsfla.org/pub/linux-libre/releases/$PKG_VER-gnu/deblob-check
 "
+    #https://linux-libre.fsfla.org/pub/linux-libre/releases/$PKG_VER-gnu/deblob-${PKG_VER}
 
 prepare () {
     make mrproper
     apply_patches
 
-    sh deblob-${PKG_VER%.*} --force
+    #sh deblob-${PKG_VER} --force
 
     cp config .config
 
diff --git a/repo/linux/linux.xibuild b/repo/linux/linux.xibuild
index 8c6b57a..68549b8 100644
--- a/repo/linux/linux.xibuild
+++ b/repo/linux/linux.xibuild
@@ -3,7 +3,7 @@
 MAKEDEPS="make bc cpio linux-headers"
 DEPS="sbase kmod"
 
-PKG_VER=5.18.6
+PKG_VER=5.19
 SOURCE=https://cdn.kernel.org/pub/linux/kernel/v${PKG_VER%%.*}.x/linux-$PKG_VER.tar.xz
 ADDITIONAL="
     fix-sbase-coreutils.patch
diff --git a/repo/lolcat/lolcat.xibuild b/repo/lolcat/lolcat.xibuild
new file mode 100644
index 0000000..1b2d987
--- /dev/null
+++ b/repo/lolcat/lolcat.xibuild
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+NAME="lolcat"
+DESC="High-performance implementation of lolcat"
+
+MAKEDEPS=""
+
+PKG_VER=1.2
+SOURCE="https://github.com/jaseg/lolcat/archive/v$PKG_VER.tar.gz"
+
+build() {
+	make
+}
+
+package() {
+	mkdir -p "$PKG_DEST/usr/bin"
+	make DESTDIR="$PKG_DEST/usr/bin" install
+}
+
diff --git a/repo/mesa/mesa.xibuild b/repo/mesa/mesa.xibuild
index 1e9d139..a77cdc6 100644
--- a/repo/mesa/mesa.xibuild
+++ b/repo/mesa/mesa.xibuild
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-MAKEDEPS="meson ninja python-mako libvdpau llvm libxxf86vm libelf lm-sensors expat wayland-protocols"
+MAKEDEPS="meson ninja python-mako libvdpau llvm libxxf86vm libelf lm-sensors expat wayland-protocols llvm"
 DEPS="xorg-libs libdrm"
 
 PKG_VER=21.3.7
diff --git a/repo/meson/meson.xibuild b/repo/meson/meson.xibuild
index f445bc4..a642b07 100644
--- a/repo/meson/meson.xibuild
+++ b/repo/meson/meson.xibuild
@@ -4,7 +4,7 @@ MAKEDEPS="python"
 DEPS="python ninja"
 
 PKG_VER=0.59
-SOURCE=https://github.com/mesonbuild/meson
+SOURCE=https://github.com/mesonbuild/meson.git
 BRANCH=$PKG_VER
 
 DESC="High productivity build system"
diff --git a/repo/nuspell/nuspell.xibuild b/repo/nuspell/nuspell.xibuild
new file mode 100644
index 0000000..a404428
--- /dev/null
+++ b/repo/nuspell/nuspell.xibuild
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+NAME="nuspell"
+DESC="Free and open source C++ spell checking library"
+
+MAKEDEPS="cmake icu ronn catch2"
+
+PKG_VER=5.1.0
+SOURCE="https://github.com/nuspell/nuspell/archive/v$PKG_VER/nuspell-$PKG_VER.tar.gz"
+
+build() {
+	cmake \
+		-DCMAKE_INSTALL_PREFIX=/usr \
+		-DCMAKE_INSTALL_LIBDIR=lib \
+		-DBUILD_SHARED_LIBS=True \
+		-DCMAKE_BUILD_TYPE=None \
+		-DCMAKE_CXX_FLAGS="$CXXFLAGS" \
+		-DCMAKE_C_FLAGS="$CFLAGS" \
+		$CMAKE_CROSSOPTS .
+	make
+}
+
+check() {
+	CTEST_OUTPUT_ON_FAILURE=TRUE ctest
+}
+
+package() {
+	make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/polkit-gnome/polkit-gnome-authentication-agent-1.desktop b/repo/polkit-gnome/polkit-gnome-authentication-agent-1.desktop
new file mode 100644
index 0000000..fc2acc2
--- /dev/null
+++ b/repo/polkit-gnome/polkit-gnome-authentication-agent-1.desktop
@@ -0,0 +1,88 @@
+[Desktop Entry]
+Name=PolicyKit Authentication Agent
+Name[ar]=مدير الاستيثاق PolicyKit
+Name[be]=PolicyKit - аґент аўтэнтыфікацыі
+Name[bn_IN]=PolicyKit অনুমোদনের এজেন্ট
+Name[ca]=Agent d'autenticació del PolicyKit
+Name[cs]=Ověřovací agent PolicyKit
+Name[da]=Godkendelsesprogrammet PolicyKit
+Name[de]=Legitimationsdienst von PolicyKit
+Name[el]=Πράκτορας πιστοποίησης PolicyKit
+Name[en_GB]=PolicyKit Authentication Agent
+Name[es]=Agente de autenticación de PolicyKit
+Name[eu]=PolicyKit autentifikatzeko agentea
+Name[fi]=PolicytKit-tunnistautumisohjelma
+Name[fr]=Agent d'authentification de PolicyKit
+Name[gl]=Axente de autenticación PolicyKit
+Name[gu]=PolicyKit સત્તાધિકરણ એજન્ટ
+Name[hi]=PolicyKit प्रमाणीकरण प्रतिनिधि
+Name[hu]=PolicyKit hitelesítési ügynök
+Name[it]=Agente di autenticazione per PolicyKit
+Name[ja]=PolicyKit 認証エージェント
+Name[kn]=PolicyKit ದೃಢೀಕರಣ ಮಧ್ಯವರ್ತಿ
+Name[lt]=PolicyKit tapatybės nustatymo agentas
+Name[ml]=പോളിസിക്കിറ്റ് ഓഥന്റിക്കേഷന്‍ ഏജന്റ്
+Name[mr]=PolicyKit ऑथेंटीकेशन एजेंट
+Name[or]=PolicyKit ବୈଧିକରଣ ସଦସ୍ୟ
+Name[pa]=ਪਾਲਸੀਕਿੱਟ ਪਰਮਾਣਕਿਤਾ ਏਜੰਟ
+Name[pl]=Agent uwierzytelniania PolicyKit
+Name[pt]=Agente de Autenticação PolicyKit
+Name[pt_BR]=Agente de autenticação PolicyKit
+Name[ro]=Agent de autentificare PolicyKit
+Name[sk]=Agent PolicyKit na overovanie totožnosti
+Name[sl]=PolicyKit program overjanja
+Name[sv]=Autentiseringsagent för PolicyKit
+Name[ta]=PolicyKit அங்கீகார முகவர்
+Name[te]=పాలసీకిట్ ధృవీకరణ ప్రతినిధి
+Name[th]=ตัวกลางสำหรับยืนยันตัวบุคคล PolicyKit
+Name[uk]=Агент автентифікації PolicyKit
+Name[zh_CN]=PolicyKit 认证代理
+Name[zh_HK]=PolicyKit 驗證代理程式
+Name[zh_TW]=PolicyKit 驗證代理程式
+Comment=PolicyKit Authentication Agent
+Comment[ar]=مدير الاستيثاق PolicyKit
+Comment[be]=PolicyKit - аґент аўтэнтыфікацыі
+Comment[bn_IN]=PolicyKit অনুমোদনের এজেন্ট
+Comment[ca]=Agent d'autenticació del PolicyKit
+Comment[cs]=Ověřovací agent PolicyKit
+Comment[da]=Godkendelsesprogrammet PolicyKit
+Comment[de]=Legitimationsdienst von PolicyKit
+Comment[el]=Πράκτορας πιστοποίησης PolicyKit
+Comment[en_GB]=PolicyKit Authentication Agent
+Comment[es]=Agente de autenticación de PolicyKit
+Comment[eu]=PolicyKit autentifikatzeko agentea
+Comment[fi]=PolicytKit-tunnistautumisohjelma
+Comment[fr]=Agent d'authentification de PolicyKit
+Comment[gl]=Axente de autenticación PolicyKit
+Comment[gu]=PolicyKit સત્તાધિકરણ એજન્ટ
+Comment[hi]=PolicyKit प्रमाणीकरण प्रतिनिधि
+Comment[hu]=PolicyKit hitelesítési ügynök
+Comment[it]=Agente di autenticazione per PolicyKit
+Comment[ja]=PolicyKit 認証エージェント
+Comment[kn]=PolicyKit ದೃಢೀಕರಣ ಮಧ್ಯವರ್ತಿ
+Comment[lt]=PolicyKit tapatybės nustatymo agentas
+Comment[ml]=പോളിസിക്കിറ്റ് ഓഥന്റിക്കേഷന്‍ ഏജന്റ്
+Comment[mr]=PolicyKit ऑथेंटीकेशन एजेंट
+Comment[or]=PolicyKit ବୈଧିକରଣ ସଦସ୍ୟ
+Comment[pa]=ਪਾਲਸੀਕਿੱਟ ਪਰਮਾਣਕਿਤਾ ਏਜੰਟ
+Comment[pl]=Agent uwierzytelniania PolicyKit
+Comment[pt]=Agente de Autenticação PolicyKit
+Comment[pt_BR]=Agente de autenticação PolicyKit
+Comment[ro]=Agent de autentificare PolicyKit
+Comment[sk]=Agent PolicyKit na overovanie totožnosti
+Comment[sl]=PolicyKit program overjanja
+Comment[sv]=Autentiseringsagent för PolicyKit
+Comment[ta]=PolicyKit அங்கீகார முகவர்
+Comment[te]=పాలసీకిట్ ధృవీకరణ ప్రతినిధి
+Comment[th]=ตัวกลางสำหรับยืนยันตัวบุคคล PolicyKit
+Comment[uk]=Агент автентифікації PolicyKit
+Comment[zh_CN]=PolicyKit 认证代理
+Comment[zh_HK]=PolicyKit 驗證代理程式
+Comment[zh_TW]=PolicyKit 驗證代理程式
+Exec=/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
+Terminal=false
+Type=Application
+Categories=
+NoDisplay=true
+NotShowIn=KDE;
+AutostartCondition=GNOME3 unless-session gnome
diff --git a/repo/polkit-gnome/polkit-gnome.xibuild b/repo/polkit-gnome/polkit-gnome.xibuild
new file mode 100644
index 0000000..3042c2b
--- /dev/null
+++ b/repo/polkit-gnome/polkit-gnome.xibuild
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+NAME="polkit-gnome"
+DESC="PolicyKit integration for the GNOME desktop"
+
+MAKEDEPS="gtk3 polkit intltool"
+
+PKG_VER=0.105
+SOURCE="https://download.gnome.org/sources/polkit-gnome/$PKG_VER/polkit-gnome-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+polkit-gnome-authentication-agent-1.desktop
+"
+
+build() {
+	./configure --prefix=/usr \
+		--sysconfdir=/etc \
+		--mandir=/usr/share/man \
+		--infodir=/usr/share/info \
+		--localstatedir=/var \
+		--libexecdir=/usr/lib/polkit-gnome
+	make
+}
+
+package() {
+	make DESTDIR="$PKG_DEST" install
+	install -Dm644 "$BUILD_ROOT/polkit-gnome-authentication-agent-1.desktop" \
+		"$PKG_DEST/etc/xdg/autostart/polkit-gnome-authentication-agent-1.desktop"
+}
+
diff --git a/repo/polkit/alpine-polkit.pam b/repo/polkit/alpine-polkit.pam
new file mode 100644
index 0000000..e718f7e
--- /dev/null
+++ b/repo/polkit/alpine-polkit.pam
@@ -0,0 +1,7 @@
+auth            requisite       pam_nologin.so
+auth            required        pam_env.so
+auth            required        pam_unix.so
+account         required        pam_unix.so
+session         required        pam_unix.so
+session         required        pam_limits.so
+password        required        pam_unix.so
diff --git a/repo/polkit/polkit-common.pre-install b/repo/polkit/polkit-common.pre-install
new file mode 100644
index 0000000..7c4e3ef
--- /dev/null
+++ b/repo/polkit/polkit-common.pre-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S polkitd 2>/dev/null
+adduser -S -D -H -h /var/empty -s /sbin/nologin -G polkitd -g polkitd polkitd 2>/dev/null
+
+exit 0
diff --git a/repo/polkit/polkit-common.pre-upgrade b/repo/polkit/polkit-common.pre-upgrade
new file mode 100644
index 0000000..7c4e3ef
--- /dev/null
+++ b/repo/polkit/polkit-common.pre-upgrade
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S polkitd 2>/dev/null
+adduser -S -D -H -h /var/empty -s /sbin/nologin -G polkitd -g polkitd polkitd 2>/dev/null
+
+exit 0
diff --git a/repo/polkit/polkit.initd b/repo/polkit/polkit.initd
new file mode 100644
index 0000000..30d2387
--- /dev/null
+++ b/repo/polkit/polkit.initd
@@ -0,0 +1,12 @@
+#!/sbin/openrc-run
+supervisor=supervise-daemon
+
+name="Polkit System Daemon"
+description="Provide System authentication via PolicyKit1 D-Bus service"
+
+command=/usr/lib/polkit-1/polkitd
+command_args="${POLKIT_OPTS:---no-debug}"
+
+depend() {
+	need dbus
+}
diff --git a/repo/polkit/polkit.xibuild b/repo/polkit/polkit.xibuild
index eb236bc..e8286dd 100644
--- a/repo/polkit/polkit.xibuild
+++ b/repo/polkit/polkit.xibuild
@@ -1,30 +1,30 @@
 #!/bin/sh
 
-MAKEDEPS="git gobject-introspection meson libxslt patch elogind gtk-doc autoconf-archive"
-DEPS="expat glib js78 pam"
+NAME="polkit"
+DESC="Application development toolkit for controlling system-wide privileges"
 
-PKG_VER=0.120
-SOURCE=https://www.freedesktop.org/software/polkit/releases/polkit-$PKG_VER.tar.gz
+MAKEDEPS="autoconf automake bash dbus-glib elogind expat glib gobject-introspection gtk2 intltool libtool pam js78"
 
-DESC="Application development toolkit for controlling system-wide privileges"
+PKG_VER=0.120
+SOURCE="https://www.freedesktop.org/software/polkit/releases/polkit-$PKG_VER.tar.gz"
 
 ADDITIONAL="
-    files/polkit-1
-    patches/CVE-2021-4034.patch
-    patches/make-innetgr-optional.patch
+CVE-2021-4034.patch
+alpine-polkit.pam
+make-innetgr-optional.patch
+polkit-common.pre-install
+polkit-common.pre-upgrade
+polkit.initd
 "
 
-prepare () {
-    apply_patches
-
-    autoreconf -fi
+prepare() {
+	apply_patches
+	autoreconf -fi
 }
 
-build () {
-    mkdir build &&
-    cd    build &&
-
-    ../configure \
+build() {
+	./configure \
+        --disable-libsystemd-login \
 		--prefix=/usr \
 		--sysconfdir=/etc \
 		--mandir=/usr/share/man \
@@ -39,20 +39,28 @@ build () {
 		--disable-gtk-doc-html \
 		--disable-gtk-doc-pdf \
 		--disable-libelogind \
-		--disable-systemd \
-        --enable-libsystemd-login
-    make
+		--disable-systemd
+	make
 }
 
-package () {
-    make DESTDIR=$PKG_DEST install &&
-        cd .. &&
-        install -m644 polkit-1 $PKG_DEST/etc/pam.d/polkit-1 
-}
+package() {
+	provider_priority=100  # highest
+
+	make DESTDIR="$PKG_DEST" \
+		dbusconfdir=/usr/share/dbus-1/system.d \
+		rulesdir=/usr/share/polkit-1/rules.d \
+        install
+	cd "$PKG_DEST"
+
+	# Use our own polkit rules, upstream may change them
+	install -m644 "$BUILD_ROOT"/alpine-polkit.pam etc/pam.d/polkit-1
 
-postinstall() {
-    /usr/sbin/groupadd -fg 27 polkitd &&
-    /usr/sbin/useradd -c "PolicyKit Daemon Owner" -d /etc/polkit-1 -u 27 \
-            -g polkitd -s /bin/false polkitd
-    true
+	# See polkit's configure script which tells us what permissions to set
+	chown -R polkitd:polkitd etc/polkit-1/rules.d usr/share/polkit-1/rules.d
+	chmod -R 700 etc/polkit-1/rules.d usr/share/polkit-1/rules.d
+	chmod 4755 usr/lib/polkit-1/polkit-agent-helper-1
+	chmod 4755 usr/bin/pkexec
+
+	install -Dm755 "$BUILD_ROOT"/polkit.initd etc/init.d/polkit
 }
+
diff --git a/repo/ronn/fix-ruby-3.1-compat.patch b/repo/ronn/fix-ruby-3.1-compat.patch
new file mode 100644
index 0000000..233da9d
--- /dev/null
+++ b/repo/ronn/fix-ruby-3.1-compat.patch
@@ -0,0 +1,24 @@
+Patch-Source: https://github.com/apjanke/ronn-ng/issues/80
+
+--- a/lib/ronn/document.rb.orig
++++ b/lib/ronn/document.rb
+@@ -289,7 +289,7 @@
+ 
+     def to_yaml
+       require 'yaml'
+-      to_h.to_yaml
++      to_h.merge('date' => date.to_s).to_yaml
+     end
+ 
+     def to_json(*_args)
+--- a/test/test_ronn_document.rb
++++ b/test/test_ronn_document.rb
+@@ -140,7 +140,7 @@ class DocumentTest < Test::Unit::TestCase
+       assert_equal({
+                      'section'      => '1',
+                      'name'         => 'hello',
+-                     'date'         => @now,
++                     'date'         => @now.to_s,
+                      'tagline'      => 'hello world',
+                      'styles'       => ['man'],
+                      'toc'          => [['NAME', 'NAME']],
diff --git a/repo/ronn/mustache-1.X.patch b/repo/ronn/mustache-1.X.patch
new file mode 100644
index 0000000..d8bd1a4
--- /dev/null
+++ b/repo/ronn/mustache-1.X.patch
@@ -0,0 +1,50 @@
+Patch-Source: https://github.com/apjanke/ronn-ng/commit/b553dae9179313b6a27d86c17708d7a1fd989a7a
+
+From b553dae9179313b6a27d86c17708d7a1fd989a7a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
+Date: Fri, 10 Apr 2020 19:06:52 +0200
+Subject: [PATCH] Support only mustache 1.x
+
+---
+ Gemfile.lock    | 6 +++---
+ ronn-ng.gemspec | 2 +-
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/Gemfile.lock b/Gemfile.lock
+index 46d6c5a..e688b8f 100644
+--- a/Gemfile.lock
++++ b/Gemfile.lock
+@@ -3,7 +3,7 @@ PATH
+   specs:
+     ronn-ng (0.9.1)
+       kramdown (~> 2.1)
+-      mustache (~> 0.7, >= 0.7.0)
++      mustache (~> 1.0)
+       nokogiri (~> 1.9, >= 1.9.0)
+ 
+ GEM
+@@ -13,9 +13,9 @@ GEM
+     jaro_winkler (1.5.3)
+     kramdown (2.1.0)
+     mini_portile2 (2.4.0)
+-    mustache (0.99.8)
++    mustache (1.1.1)
+     mustermann (1.0.3)
+-    nokogiri (1.10.7)
++    nokogiri (1.10.9)
+       mini_portile2 (~> 2.4.0)
+     parallel (1.17.0)
+     parser (2.6.3.0)
+diff --git a/ronn-ng.gemspec b/ronn-ng.gemspec
+index d07cc14..a476c70 100644
+--- a/ronn-ng.gemspec
++++ b/ronn-ng.gemspec
+@@ -111,7 +111,7 @@ Gem::Specification.new do |s|
+ 
+   s.extra_rdoc_files = %w[LICENSE.txt AUTHORS]
+   s.add_dependency 'kramdown',    '~> 2.1'
+-  s.add_dependency 'mustache',    '~> 0.7', '>= 0.7.0'
++  s.add_dependency 'mustache',    '~> 1.0'
+   s.add_dependency 'nokogiri',    '~> 1.9', '>= 1.9.0'
+   s.add_development_dependency 'rack',      '~> 2.0',  '>= 2.0.6'
+   s.add_development_dependency 'rake',      '~> 12.3', '>= 12.3.0'
diff --git a/repo/ronn/ronn.xibuild b/repo/ronn/ronn.xibuild
new file mode 100644
index 0000000..50e700e
--- /dev/null
+++ b/repo/ronn/ronn.xibuild
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+NAME="ronn"
+DESC="Convert Markdown files to manpages"
+
+MAKEDEPS=""
+
+PKG_VER=0.9.1
+_gemname=ronn-ng
+SOURCE="https://github.com/apjanke/$_gemname/archive/v$PKG_VER/$_gemname-$PKG_VER.tar.gz"
+DEPS="ruby ruby-kramdown ruby-mustache ruby-nokogiri"
+
+ADDITIONAL="
+fix-ruby-3.1-compat.patch
+mustache-1.X.patch
+"
+
+prepare () {
+    apply_patches
+}
+
+build() {
+	gem build $_gemname.gemspec
+}
+
+check() {
+	rake test
+}
+
+package() {
+	local gemdir="$PKG_DEST/$(ruby -e 'puts Gem.default_dir')"
+	local geminstdir="$gemdir/gems/$_gemname-$PKG_VER"
+
+	gem install --local \
+		--install-dir "$gemdir" \
+		--bindir "$PKG_DEST/usr/bin" \
+		--ignore-dependencies \
+		--no-document \
+		--verbose \
+		$_gemname
+
+	install -D -m 644 "$geminstdir"/man/ronn.1 \
+		"$PKG_DEST"/usr/share/man/man1/ronn.1
+	install -D -m 644 "$geminstdir"/man/ronn-format.7 \
+		"$PKG_DEST"/usr/share/man/man7/ronn-format.7
+
+	# Remove unnecessary files and rubbish...
+	cd "$gemdir"
+	rm -r cache build_info doc extensions plugins
+	cd "$geminstdir"
+	rm -r test man Rakefile [A-Z][A-Z][A-Z]*
+}
+
diff --git a/repo/ruby-kramdown/gemspec.patch b/repo/ruby-kramdown/gemspec.patch
new file mode 100644
index 0000000..f90f36b
--- /dev/null
+++ b/repo/ruby-kramdown/gemspec.patch
@@ -0,0 +1,18 @@
+--- a/Rakefile
++++ b/Rakefile
+@@ -116,15 +116,9 @@
+   end
+ 
+   PKG_FILES = FileList.new([
+-                             'AUTHORS',
+                              'bin/*',
+-                             'CONTRIBUTERS',
+-                             'COPYING',
+                              'data/**/*',
+                              'lib/**/*.rb',
+-                             'man/man1/kramdown.1',
+-                             'README.md',
+-                             'test/**/*',
+                              'VERSION',
+                            ])
+ 
diff --git a/repo/ruby-kramdown/ruby-kramdown.xibuild b/repo/ruby-kramdown/ruby-kramdown.xibuild
new file mode 100644
index 0000000..e3dd94a
--- /dev/null
+++ b/repo/ruby-kramdown/ruby-kramdown.xibuild
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+NAME="ruby-kramdown"
+_gemname=kramdown
+DESC="A fast, pure Ruby Markdown superset converter"
+
+MAKEDEPS=" ruby-rake"
+
+PKG_VER=2.3.2
+SOURCE="https://github.com/gettalong/kramdown"
+
+ADDITIONAL="
+gemspec.patch
+"
+
+prepare() {
+	apply_patches
+
+	# Remove tests that require gem "stringex" (we don't have it in aports yet).
+	rm test/testcases/block/04_header/with_auto_ids.*
+}
+
+build() {
+	rake gemspec
+	gem build $_gemname.gemspec
+}
+
+check() {
+	rake test
+}
+
+package() {
+	local gemdir="$PKG_DEST/$(ruby -e 'puts Gem.default_dir')"
+
+	gem install \
+		--local \
+		--install-dir "$gemdir" \
+		--bindir "$PKG_DEST/usr/bin" \
+		--ignore-dependencies \
+		--no-document \
+		--verbose \
+		$_gemname
+
+	# Remove unnecessary files and rubbish...
+	cd "$gemdir"
+	rm -r cache build_info doc extensions
+}
+
diff --git a/repo/ruby-mustache/fix-test-race-condition.patch b/repo/ruby-mustache/fix-test-race-condition.patch
new file mode 100644
index 0000000..824825b
--- /dev/null
+++ b/repo/ruby-mustache/fix-test-race-condition.patch
@@ -0,0 +1,36 @@
+From 407c6a5db6c1f1cfb40bd6113f07f067d07885a4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Mon, 27 Apr 2020 11:16:17 +0200
+Subject: [PATCH] Fix test race condition.
+
+The test suite randomly fails with errors such as:
+
+~~~
+  1) Failure:
+AutoloadingTest#test_autoload_lowercase [/builddir/build/BUILD/mustache-1.1.1/usr/share/gems/gems/mustache-1.1.1/test/autoloading_test.rb:17]:
+Expected: Comments
+  Actual: nil
+~~~
+
+This happens when `test_namespaced*` test cases are executed earlier
+than the remaining test cases, because they are defining
+`view_namespace` but not cleaning up afterwards.
+---
+ test/autoloading_test.rb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/test/autoloading_test.rb b/test/autoloading_test.rb
+index 0a7ad762..77eb3557 100644
+--- a/test/autoloading_test.rb
++++ b/test/autoloading_test.rb
+@@ -7,6 +7,10 @@ def setup
+     Mustache.view_path = File.dirname(__FILE__) + '/fixtures'
+   end
+ 
++  def teardown
++    Mustache.remove_instance_variable(:@view_namespace) if Mustache.instance_variable_defined?(:@view_namespace)
++  end
++
+   def test_autoload
+     klass = Mustache.view_class(:Comments)
+     assert_equal Comments, klass
diff --git a/repo/ruby-mustache/ruby-mustache.xibuild b/repo/ruby-mustache/ruby-mustache.xibuild
new file mode 100644
index 0000000..8074a81
--- /dev/null
+++ b/repo/ruby-mustache/ruby-mustache.xibuild
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+NAME="ruby-mustache"
+_gemname=mustache
+DESC="Logic-less Ruby templates"
+
+MAKEDEPS=""
+
+PKG_VER=1.1.1
+SOURCE="ruby-mustache-$PKG_VER.tar.gz::https://github.com/mustache/mustache/archive/v$PKG_VER.tar.gz"
+
+ADDITIONAL="
+fix-test-race-condition.patch
+skip-simplecov.patch
+"
+
+prepare () {
+    apply_patches
+}
+
+build() {
+	gem build $_gemname.gemspec
+}
+
+check() {
+	rake test
+}
+
+package() {
+	local gemdir="$PKG_DEST/$(ruby -e 'puts Gem.default_dir')"
+	local geminstdir="$gemdir/gems/$_gemname-$PKG_VER"
+
+	gem install --local \
+		--install-dir "$gemdir" \
+		--ignore-dependencies \
+		--no-document \
+		--verbose \
+		$_gemname
+
+	# Remove unnecessary files and rubbish...
+	cd "$gemdir"
+	rm -r cache build_info doc
+	cd "$geminstdir"
+	rm -r test man Rakefile *.md
+}
+
diff --git a/repo/ruby-mustache/skip-simplecov.patch b/repo/ruby-mustache/skip-simplecov.patch
new file mode 100644
index 0000000..99f0afd
--- /dev/null
+++ b/repo/ruby-mustache/skip-simplecov.patch
@@ -0,0 +1,13 @@
+Don't run code coverage analyser to avoid additional dependency.
+
+--- a/test/helper.rb.orig
++++ b/test/helper.rb
+@@ -1,8 +1,3 @@
+-require 'simplecov'
+-SimpleCov.start do
+-  add_filter '/test/'
+-end
+-
+ require 'minitest/autorun'
+ 
+ Dir[File.dirname(__FILE__) + '/fixtures/*.rb'].each do |f|
diff --git a/repo/ruby-nokogiri/gemspec-fix-deps.patch b/repo/ruby-nokogiri/gemspec-fix-deps.patch
new file mode 100644
index 0000000..9136e6e
--- /dev/null
+++ b/repo/ruby-nokogiri/gemspec-fix-deps.patch
@@ -0,0 +1,15 @@
+racc and mini_portile2 are needed only to build native extension.
+
+--- a/nokogiri.gemspec
++++ b/nokogiri.gemspec
+@@ -318,8 +318,8 @@
+   spec.extra_rdoc_files += Dir.glob("README.md")
+   spec.rdoc_options = ["--main", "README.md"]
+
+-  spec.add_runtime_dependency("mini_portile2", "~> 2.8.0") unless java_p # keep version in sync with extconf.rb
+-  spec.add_runtime_dependency("racc", "~> 1.4")
++  spec.add_development_dependency("mini_portile2", "~> 2.8.0") unless java_p # keep version in sync with extconf.rb
++  spec.add_development_dependency("racc", "~> 1.4")
+
+   spec.add_development_dependency("bundler", "~> 2.2")
+   spec.add_development_dependency("hoe-markdown", "~> 1.4")
diff --git a/repo/ruby-nokogiri/ruby-nokogiri.xibuild b/repo/ruby-nokogiri/ruby-nokogiri.xibuild
new file mode 100644
index 0000000..dec12d1
--- /dev/null
+++ b/repo/ruby-nokogiri/ruby-nokogiri.xibuild
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+NAME="ruby-nokogiri"
+DESC="An HTML, XML, SAX, and Reader parser"
+
+MAKEDEPS="libxml2 libxslt ruby ruby-mini_portile2"
+
+_gemname=${pkgname#ruby-}
+
+PKG_VER=1.13.4
+SOURCE="https://github.com/sparklemotion/$_gemname/archive/v$PKG_VER/$_gemname-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+gemspec-fix-deps.patch
+shutdown-libxml2-warning.patch
+test-helper-remove-unnecessary-deps.patch
+"
+
+build() {
+	gem build $_gemname.gemspec
+	gem install \
+		--local \
+		--install-dir dist \
+		--ignore-dependencies \
+		--no-document \
+		--verbose \
+		$_gemname-$PKG_VER.gem -- \
+			--use-system-libraries
+
+	# Remove unnecessary files and rubbish...
+	find dist/extensions/ -name mkmf.log -delete
+	cd dist/gems/$_gemname-$PKG_VER/
+	rm -rf ext/ patches/
+	rm ./*.md ./*.yml
+	rm lib/*.jar
+	rm lib/nokogiri/*.so
+	rm lib/nokogiri/css/*.rex lib/nokogiri/css/*.y
+}
+
+check() {
+	local extpath=$(dirname dist/extensions/*/*/$_gemname-$PKG_VER/gem_make.out)
+
+	case "$CARCH" in
+		# Fix NotImplementedError: Compaction isn't available on this platform.
+		ppc64le) export NOKOGIRI_TEST_GC_LEVEL=major;;
+	esac
+
+	# Note: This is based on Fedora package.
+	LANG="C.UTF-8" RUBYLIB=".:dist/gems/$_gemname-$PKG_VER/lib:test:$extpath" ruby \
+		-e 'require "test/helper"' \
+		-e 'Dir.glob("test/**/test_*.rb") {|f| require f }'
+}
+
+package() {
+	local gemdir="$PKG_DEST/$(ruby -e 'puts Gem.default_dir')"
+
+	cd "$BUILD_ROOT"/dist
+
+	mkdir -p "$gemdir"
+	cp -r bin extensions gems specifications "$gemdir"/
+}
+
diff --git a/repo/ruby-nokogiri/shutdown-libxml2-warning.patch b/repo/ruby-nokogiri/shutdown-libxml2-warning.patch
new file mode 100644
index 0000000..c897379
--- /dev/null
+++ b/repo/ruby-nokogiri/shutdown-libxml2-warning.patch
@@ -0,0 +1,12 @@
+Patch-Source: https://src.fedoraproject.org/rpms/rubygem-nokogiri/blob/f36/f/rubygem-nokogiri-1.11.0.rc4-shutdown-libxml2-warning.patch
+
+--- a/lib/nokogiri/version/info.rb
++++ b/lib/nokogiri/version/info.rb
+@@ -58,6 +58,7 @@ module Nokogiri
+ 
+     def warnings
+       warnings = []
++      return warnings
+ 
+       if libxml2?
+         if compiled_libxml_version != loaded_libxml_version
diff --git a/repo/ruby-nokogiri/test-helper-remove-unnecessary-deps.patch b/repo/ruby-nokogiri/test-helper-remove-unnecessary-deps.patch
new file mode 100644
index 0000000..bfb5ceb
--- /dev/null
+++ b/repo/ruby-nokogiri/test-helper-remove-unnecessary-deps.patch
@@ -0,0 +1,22 @@
+--- a/test/helper.rb
++++ b/test/helper.rb
+@@ -16,19 +16,12 @@
+ # make sure we do one final major before the process exits (for valgrind)
+ at_exit { GC.start(full_mark: true) } unless ::RUBY_PLATFORM == "java"
+ 
+-require "simplecov"
+-SimpleCov.start do
+-  add_filter "/test/"
+-end
+ 
+ $VERBOSE = true
+ 
+ require "minitest/autorun"
+-require "minitest/reporters"
+ NOKOGIRI_MINITEST_REPORTERS_OPTIONS = { color: true, slow_count: 10, detailed_skip: false }
+ NOKOGIRI_MINITEST_REPORTERS_OPTIONS[:fast_fail] = true if ENV["NOKOGIRI_TEST_FAIL_FAST"]
+-puts "Minitest::Reporters options: #{NOKOGIRI_MINITEST_REPORTERS_OPTIONS}"
+-Minitest::Reporters.use!(Minitest::Reporters::DefaultReporter.new(NOKOGIRI_MINITEST_REPORTERS_OPTIONS))
+ 
+ require "fileutils"
+ require "tempfile"
diff --git a/repo/spice-gtk/disable-test-relying-on-usb.patch b/repo/spice-gtk/disable-test-relying-on-usb.patch
new file mode 100644
index 0000000..2a8e283
--- /dev/null
+++ b/repo/spice-gtk/disable-test-relying-on-usb.patch
@@ -0,0 +1,22 @@
+diff --git a/tests/meson.build b/tests/meson.build
+index 6c8077622d..9b77e84be9 100644
+--- a/tests/meson.build
++++ b/tests/meson.build
+@@ -1,7 +1,6 @@
+ tests_sources = [
+   'util.c',
+   'coroutine.c',
+-  'session.c',
+   'uri.c',
+   'file-transfer.c',
+ ]
+@@ -10,9 +9,6 @@
+   tests_sources += 'pipe.c'
+ endif
+ 
+-if spice_gtk_has_usbredir
+-  tests_sources += 'cd-emu.c'
+-endif
+ 
+ if spice_gtk_has_polkit
+   tests_sources += [
diff --git a/repo/spice-gtk/fix-pkgconfig-version.patch b/repo/spice-gtk/fix-pkgconfig-version.patch
new file mode 100644
index 0000000..687e3b4
--- /dev/null
+++ b/repo/spice-gtk/fix-pkgconfig-version.patch
@@ -0,0 +1,13 @@
+diff --git a/meson.build b/meson.build
+index 8c6288f..caef2d4 100644
+--- a/meson.build
++++ b/meson.build
+@@ -2,7 +2,7 @@
+ # project definition
+ #
+ project('spice-gtk', 'c',
+-         version : run_command('build-aux/git-version-gen', '@0@/.tarball-version'.format(meson.source_root()), check : true).stdout().strip(),
++         version : '0.38',
+          license : 'LGPLv2.1',
+          meson_version : '>= 0.49',
+          default_options : ['buildtype=debugoptimized',
diff --git a/repo/spice-gtk/spice-gtk.xibuild b/repo/spice-gtk/spice-gtk.xibuild
new file mode 100644
index 0000000..4cdf6b7
--- /dev/null
+++ b/repo/spice-gtk/spice-gtk.xibuild
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+NAME="spice-gtk"
+DESC="GTK+ widget for SPICE clients"
+
+MAKEDEPS=" meson gstreamer gst-plugins-base spice-protocol json-glib gtk3 usbredir libusb asciidoc lz4 opus glib libsasl gobject-introspection vala libjpeg-turbo cairo zlib pixman openssl libx11 libepoxy libva python-six python-parsing perl acl polkit"
+
+PKG_VER=0.40
+SOURCE="https://www.spice-space.org/download/gtk/spice-gtk-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+disable-test-relying-on-usb.patch
+fix-pkgconfig-version.patch
+"
+
+prepare () {
+    apply_patches
+}
+
+build() {
+	meson --prefix=/usr \
+		-Dgtk=enabled \
+		-Dwebdav=disabled \
+		-Dbuiltin-mjpeg=false \
+		-Dusbredir=enabled \
+		-Dpolkit=enabled\
+		-Dpie=true \
+		-Dintrospection=enabled \
+		-Dvapi=enabled \
+		-Dlz4=enabled \
+		-Dsasl=enabled \
+		-Dopus=enabled \
+		-Dsmartcard=disabled \
+		-Dgtk_doc=disabled \
+		-Dcoroutine=gthread \
+		. output
+	meson compile ${JOBS:+-j ${JOBS}} -C output
+}
+
+check() {
+	meson test --no-rebuild -v -C output
+}
+
+package() {
+	DESTDIR="$PKG_DEST" meson install --no-rebuild -C output
+}
diff --git a/repo/spice-vdagent/spice-vdagent.xibuild b/repo/spice-vdagent/spice-vdagent.xibuild
new file mode 100644
index 0000000..f997504
--- /dev/null
+++ b/repo/spice-vdagent/spice-vdagent.xibuild
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+NAME="spice-vdagent"
+DESC="Spice guest agent for Linux"
+
+MAKEDEPS="spice-protocol alsa-lib dbus glib libdrm libpciaccess libxfixes libxinerama libxrandr"
+
+PKG_VER=0.22.1
+SOURCE="https://spice-space.org/download/releases/spice-vdagent-$PKG_VER.tar.bz2"
+
+ADDITIONAL="
+spice-vdagentd.initd
+"
+
+build() {
+	./configure \
+		--prefix=/usr \
+		--localstatedir=/var \
+		--with-session-info=none
+	make
+}
+
+check() {
+	make check
+}
+
+package() {
+	make install DESTDIR="$PKG_DEST"
+	install -Dm0755 "$BUILD_ROOT"/spice-vdagentd.initd "$PKG_DEST"/etc/init.d/spice-vdagentd
+	install -dm 0755 "$PKG_DEST"/etc/modules-load.d/
+	printf 'uinput\n' >"$PKG_DEST"/etc/modules-load.d/spice-vdagent.conf
+}
+
diff --git a/repo/spice-vdagent/spice-vdagentd.initd b/repo/spice-vdagent/spice-vdagentd.initd
new file mode 100644
index 0000000..d6a212a
--- /dev/null
+++ b/repo/spice-vdagent/spice-vdagentd.initd
@@ -0,0 +1,13 @@
+#!/sbin/openrc-run
+
+command=/usr/sbin/spice-vdagentd
+command_args=""
+pidfile="/run/spice-vdagentd/spice-vdagentd.pid"
+
+depend() {
+	need dbus
+}
+
+start_pre() {
+	checkpath --directory --mode 0755 --owner root:root /run/spice-vdagentd
+}
diff --git a/repo/squashfs-tools/fix-compat.patch b/repo/squashfs-tools/fix-compat.patch
new file mode 100644
index 0000000..8a5ff06
--- /dev/null
+++ b/repo/squashfs-tools/fix-compat.patch
@@ -0,0 +1,12 @@
+--- a/squashfs-tools/action.c
++++ b/squashfs-tools/action.c
+@@ -1905,6 +1905,9 @@
+ 	return 1;
+ }
+ 
++#ifndef FNM_EXTMATCH
++#define FNM_EXTMATCH 0
++#endif
+ 
+ TEST_FN(name, ACTION_ALL_LNK, \
+ 	return fnmatch(atom->argv[0], action_data->name,
diff --git a/repo/squashfs-tools/squashfs-tools.xibuild b/repo/squashfs-tools/squashfs-tools.xibuild
new file mode 100644
index 0000000..13bfee4
--- /dev/null
+++ b/repo/squashfs-tools/squashfs-tools.xibuild
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+NAME="squashfs-tools"
+DESC="Tools for squashfs, a highly compressed read-only filesystem for Linux"
+
+MAKEDEPS="zlib xz lzo lz4 attr zstd"
+
+PKG_VER=4.5.1
+SOURCE="https://github.com/plougher/squashfs-tools/archive/$PKG_VER.tar.gz"
+
+ADDITIONAL="
+fix-compat.patch
+"
+
+prepare () {
+    apply_patches
+}
+
+build() {
+	make -C squashfs-tools XZ_SUPPORT=1 LZO_SUPPORT=1 LZ4_SUPPORT=1 ZSTD_SUPPORT=1
+}
+
+package() {
+	mkdir -p "$PKG_DEST"/sbin
+	cp -a squashfs-tools/*squashfs "$PKG_DEST"/sbin
+}
+
diff --git a/repo/xipkg/xipkg.xibuild b/repo/xipkg/xipkg.xibuild
index 712e0c4..e9f0fd3 100644
--- a/repo/xipkg/xipkg.xibuild
+++ b/repo/xipkg/xipkg.xibuild
@@ -1,18 +1,14 @@
 #!/bin/sh
 
-MAKEDEPS="make"
-DEPS="openssl curl dash xiutils findutils diffutils sed xichroot grep base64 sort hbar parseconf xiutils"
+MAKEDEPS="make shmk"
+DEPS="openssl curl dash findutils diffutils sed xichroot grep base64 sort hbar parseconf xiutils"
 
-PKG_VER=1.6
+PKG_VER=1.7.3
 SOURCE=https://git.davidovski.xyz/xilinux/xipkg.git
 BRANCH="v$PKG_VER"
 
 DESC="The xilinux package manager"
 
-build () {
-    make 
-}
-
 package () {
-    make DESTDIR=$PKG_DEST install
+    make PREFIX=/usr DESTDIR=$PKG_DEST install
 }
diff --git a/repo/xiutils/shmk.xibuild b/repo/xiutils/shmk.xibuild
new file mode 100644
index 0000000..7e1788d
--- /dev/null
+++ b/repo/xiutils/shmk.xibuild
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+DESC="simple shell build system for xi"
+
+package () {
+    add_from_main usr/bin/shmk
+}
diff --git a/repo/xiutils/xitui.xibuild b/repo/xiutils/xitui.xibuild
index ab3938f..093665f 100644
--- a/repo/xiutils/xitui.xibuild
+++ b/repo/xiutils/xitui.xibuild
@@ -1,6 +1,8 @@
+#!/bin/sh
+
 DESC="xilinux Text User Interface tools"
 DEPS="sh ncurses stty"
 
 package () {
-    add_from_main usr/lib/xitui
+    add_from_main usr/lib/xitui.sh
 }
diff --git a/repo/xiutils/xiutils.xibuild b/repo/xiutils/xiutils.xibuild
index e3ba894..a5650af 100644
--- a/repo/xiutils/xiutils.xibuild
+++ b/repo/xiutils/xiutils.xibuild
@@ -3,12 +3,17 @@
 MAKEDEPS="make gcc"
 DEPS="musl sh"
 
-PKG_VER=1.7
+PKG_VER=1.8
 SOURCE=https://git.davidovski.xyz/xilinux/xiutils.git
 BRANCH="v$PKG_VER"
 
 DESC="Utilities required by various components of the xilinux system"
 
+prepare () {
+    mkdir -p dist
+    cp src/lib/colors.h dist/
+}
+
 build () {
     make
 }
-- 
cgit v1.2.1