From ee42338c88b7af54fbf193edb235f30c0b98825b Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Sat, 14 Dec 2019 22:11:08 +0100
Subject: [PATCH] Delete everything GTK specific

Because the two independent Briar projects briar_repl and Briar GTK
combine forces, the api wrapper part that used to be part of Briar GTK
now becomes a new project on its own: python-briar-wrapper.

With this commit, everything specific to GTK and GNOME gets deleted.
---
 .coveragerc                                   |   7 -
 CONTRIBUTING.md                               |  93 ------
 app.briar.gtk.json                            | 117 -------
 code-of-conduct.md                            | 126 --------
 data/app.briar.gtk.appdata.xml.in             |  19 --
 data/app.briar.gtk.desktop.in                 |  10 -
 data/app.briar.gtk.gschema.xml                |   5 -
 .../hicolor/16x16/apps/app.briar.gtk.png      | Bin 1093 -> 0 bytes
 .../hicolor/22x22/apps/app.briar.gtk.png      | Bin 1271 -> 0 bytes
 .../hicolor/256x256/apps/app.briar.gtk.png    | Bin 7597 -> 0 bytes
 .../hicolor/32x32/apps/app.briar.gtk.png      | Bin 1600 -> 0 bytes
 .../hicolor/48x48/apps/app.briar.gtk.png      | Bin 1996 -> 0 bytes
 .../hicolor/512x512/apps/app.briar.gtk.png    | Bin 15117 -> 0 bytes
 .../hicolor/scalable/apps/app.briar.gtk.svg   | 157 ---------
 data/icons/meson.build                        |   8 -
 data/meson.build                              |  57 ----
 data/ui/add_contact.ui                        | 266 ---------------
 data/ui/app.briar.gtk.gresource.xml           |  12 -
 data/ui/application.css                       |   4 -
 data/ui/chat.ui                               |  42 ---
 data/ui/login.ui                              | 147 ---------
 data/ui/main.ui                               |  22 --
 data/ui/registration.ui                       | 304 ------------------
 data/ui/toolbar_start.ui                      |  52 ---
 po/LINGUAS                                    |   2 -
 po/POTFILES                                   |   7 -
 po/briar-gtk.pot                              | 111 -------
 po/de.po                                      | 128 --------
 po/es.po                                      | 124 -------
 po/meson.build                                |   5 -
 src/briar-gtk.in                              |  57 ----
 src/briar/gtk/application.py                  |  64 ----
 src/briar/gtk/container.py                    |  12 -
 src/briar/gtk/containers/add_contact.py       | 139 --------
 src/briar/gtk/containers/chat.py              |  59 ----
 src/briar/gtk/containers/login.py             |  85 -----
 src/briar/gtk/containers/main.py              |  62 ----
 src/briar/gtk/containers/registration.py      | 138 --------
 src/briar/gtk/containers/startup.py           |  23 --
 src/briar/gtk/define.py                       |  16 -
 src/briar/gtk/toolbar.py                      |  51 ---
 src/briar/gtk/window.py                       | 109 -------
 src/meson_post_install.py                     |  24 --
 tests/briar/gtk/test_application.py           | 139 --------
 tests/briar/gtk/test_toolbar.py               |  50 ---
 tools/generate_data.sh                        |  52 ---
 46 files changed, 2905 deletions(-)
 delete mode 100644 .coveragerc
 delete mode 100644 CONTRIBUTING.md
 delete mode 100644 app.briar.gtk.json
 delete mode 100644 code-of-conduct.md
 delete mode 100644 data/app.briar.gtk.appdata.xml.in
 delete mode 100644 data/app.briar.gtk.desktop.in
 delete mode 100644 data/app.briar.gtk.gschema.xml
 delete mode 100644 data/icons/hicolor/16x16/apps/app.briar.gtk.png
 delete mode 100644 data/icons/hicolor/22x22/apps/app.briar.gtk.png
 delete mode 100644 data/icons/hicolor/256x256/apps/app.briar.gtk.png
 delete mode 100644 data/icons/hicolor/32x32/apps/app.briar.gtk.png
 delete mode 100644 data/icons/hicolor/48x48/apps/app.briar.gtk.png
 delete mode 100644 data/icons/hicolor/512x512/apps/app.briar.gtk.png
 delete mode 100644 data/icons/hicolor/scalable/apps/app.briar.gtk.svg
 delete mode 100644 data/icons/meson.build
 delete mode 100644 data/meson.build
 delete mode 100644 data/ui/add_contact.ui
 delete mode 100644 data/ui/app.briar.gtk.gresource.xml
 delete mode 100644 data/ui/application.css
 delete mode 100644 data/ui/chat.ui
 delete mode 100644 data/ui/login.ui
 delete mode 100644 data/ui/main.ui
 delete mode 100644 data/ui/registration.ui
 delete mode 100644 data/ui/toolbar_start.ui
 delete mode 100644 po/LINGUAS
 delete mode 100644 po/POTFILES
 delete mode 100644 po/briar-gtk.pot
 delete mode 100644 po/de.po
 delete mode 100644 po/es.po
 delete mode 100644 po/meson.build
 delete mode 100755 src/briar-gtk.in
 delete mode 100644 src/briar/gtk/application.py
 delete mode 100644 src/briar/gtk/container.py
 delete mode 100644 src/briar/gtk/containers/add_contact.py
 delete mode 100644 src/briar/gtk/containers/chat.py
 delete mode 100644 src/briar/gtk/containers/login.py
 delete mode 100644 src/briar/gtk/containers/main.py
 delete mode 100644 src/briar/gtk/containers/registration.py
 delete mode 100644 src/briar/gtk/containers/startup.py
 delete mode 100644 src/briar/gtk/define.py
 delete mode 100644 src/briar/gtk/toolbar.py
 delete mode 100644 src/briar/gtk/window.py
 delete mode 100755 src/meson_post_install.py
 delete mode 100644 tests/briar/gtk/test_application.py
 delete mode 100644 tests/briar/gtk/test_toolbar.py
 delete mode 100755 tools/generate_data.sh

diff --git a/.coveragerc b/.coveragerc
deleted file mode 100644
index baf1ca1..0000000
--- a/.coveragerc
+++ /dev/null
@@ -1,7 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-[run]
-omit =
-    src/meson_post_install.py
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index d246aa7..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,93 +0,0 @@
-## Contributing to Briar GTK
-
-Thank you for looking in this file!
-
-When contributing to the development of Briar GTK, please first discuss the change you wish to make via issue, email, or any other method with the maintainers before making a change.
-
-If you have any questions regarding the use or development of Briar GTK,
-want to discuss design or simply hang out, please join us in [Briar's Mattermost chat](https://chat.briarproject.org/), [#briar on freenode.net](irc://freenode.net/#briar) or [the bridge to the Matrix network](https://matrix.to/#/#freenode_#briar:matrix.org).
-
-Please note we have a [code of conduct](/code-of-conduct.md), please follow it in all your interactions with the project.
-
-## Source repository
-
-Briar GTK's main source repository is at [code.briarproject.org/nicoalt/briar-gtk](https://code.briarproject.org/nicoalt/briar-gtk).
-
-Development happens in the master branch.
-
-If you need to publish a branch, feel free to do it at any
-publically-accessible Git hosting service, although code.briarproject.org
-makes things easier for the maintainers.
-
-## Style
-
-We use pycodestyle and pylint for code formatting and we enforce it on the GitLab CI server.
-
-## Running the test suite
-
-You can run the tests with the script at [tools/run-tests.sh](tools/run-tests.sh).
-
-# Issues, issues and more issues!
-
-There are many ways you can contribute to Briar GTK, and all of them involve creating issues
-in [Briar GTK's issue tracker](https://code.briarproject.org/nicoalt/briar-gtk/issues). This is the entry point for your contribution.
-
-To create an effective and high quality ticket, try to put the following information on your
-ticket:
-
- 1. A detailed description of the issue or feature request
-     - For issues, please add the necessary steps to reproduce the issue.
-     - For feature requests, add a detailed description of your proposal.
- 2. A checklist of Development tasks
- 3. A checklist of Design tasks
- 4. A checklist of QA tasks
-
-## Issue template
-```
-[Title of the issue or feature request]
-
-Detailed description of the issue. Put as much information as you can, potentially
-with images showing the issue or mockups of the proposed feature.
-
-If it's an issue, add the steps to reproduce like this:
-
-Steps to reproduce:
-
-1. Open Briar GTK
-2. Do an Action
-3. ...
-
-## Design Tasks
-
-* [ ]  design tasks
-
-## Development Tasks
-
-* [ ]  development tasks
-
-## QA Tasks
-
-* [ ]  qa (quality assurance) tasks
-```
-
-## Merge Request Process
-
-1. Ensure your code compiles.
-2. Ensure the test suit passes. Run `tools/run-tests.sh`.
-3. If you're adding new API, it must be properly documented.
-4. The commit message has to be formatted as follows:
-   ```
-   component: <summary>
-
-   A paragraph explaining the problem and its context.
-
-   Another one explaining how you solved that.
-
-   <link to the bug ticket>
-   ```
-5. You may merge the merge request once you have the sign-off of the maintainers, or if you
-   do not have permission to do that, you may request the second reviewer to merge it for you.
-
-## Code of Conduct
-
-We follow the [GNOME Foundation Code of Conduct](/code-of-conduct.md).
diff --git a/app.briar.gtk.json b/app.briar.gtk.json
deleted file mode 100644
index 343bb08..0000000
--- a/app.briar.gtk.json
+++ /dev/null
@@ -1,117 +0,0 @@
-{
-    "app-id": "app.briar.gtk",
-    "runtime": "org.gnome.Platform",
-    "runtime-version": "3.32",
-    "sdk": "org.gnome.Sdk",
-    "sdk-extensions": [
-        "org.freedesktop.Sdk.Extension.openjdk11"
-    ],
-    "command": "briar-gtk",
-    "finish-args": [
-        "--share=network",
-        "--share=ipc",
-        "--socket=x11",
-        "--socket=wayland",
-        "--filesystem=xdg-run/dconf",
-        "--filesystem=~/.config/dconf:ro",
-        "--filesystem=~/.briar",
-        "--talk-name=ca.desrt.dconf",
-        "--env=DCONF_USER_CONFIG_DIR=.config/dconf",
-        "--env=PATH=/app/bin:/usr/bin:/app/jre/bin"
-    ],
-    "build-options": {
-        "cflags": "-O2 -g",
-        "cxxflags": "-O2 -g",
-        "env": {
-            "V": "1"
-        }
-    },
-    "cleanup": [
-        "/include",
-        "/lib/pkgconfig",
-        "/man",
-        "/share/doc",
-        "/share/gtk-doc",
-        "/share/man",
-        "/share/pkgconfig",
-        "*.la",
-        "*.a"
-    ],
-    "modules": [
-        {
-            "name": "openjdk",
-            "buildsystem": "simple",
-            "build-commands": [
-                "/usr/lib/sdk/openjdk11/install.sh"
-            ]
-        },
-        {
-            "name": "python-dependencies",
-            "buildsystem": "simple",
-            "build-commands": [
-                "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} requests2 websockets"
-            ],
-            "sources": [
-                {
-                    "type": "file",
-                    "url": "https://files.pythonhosted.org/packages/18/b0/8146a4f8dd402f60744fa380bc73ca47303cccf8b9190fd16a827281eac2/certifi-2019.9.11-py2.py3-none-any.whl",
-                    "sha256": "fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef"
-                },
-                {
-                    "type": "file",
-                    "url": "https://files.pythonhosted.org/packages/24/53/f397db567de0aa0e81b211d81c13c41a779f14893e42189cf5bdb97611b2/urllib3-1.21.1-py2.py3-none-any.whl",
-                    "sha256": "8ed6d5c1ff9d6ba84677310060d6a3a78ca3072ce0684cb3c645023009c114b1"
-                },
-                {
-                    "type": "file",
-                    "url": "https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl",
-                    "sha256": "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
-                },
-                {
-                    "type": "file",
-                    "url": "https://files.pythonhosted.org/packages/89/f0/7cd1a25af31a5d4971d2eac794b0bc31eb445b28cadd621d4ad04be5ae4c/requests2-2.16.0-py2.py3-none-any.whl",
-                    "sha256": "141d4f8ad6c1b68932d54f71f303c2aef681556b519c490ec83da193761a9f91"
-                },
-                {
-                    "type": "file",
-                    "url": "https://files.pythonhosted.org/packages/11/7d/9bbbd7bb35f34b0169542487d2a8859e44306bb2e6a4455d491800a5621f/idna-2.5-py2.py3-none-any.whl",
-                    "sha256": "cc19709fd6d0cbfed39ea875d29ba6d4e22c0cebc510a76d6302a28385e8bb70"
-                },
-                {
-                    "type": "file",
-                    "url": "https://files.pythonhosted.org/packages/79/78/17e97a159dc55308b1468a638c7267f19765281f6205ec9c15253c154022/websockets-8.0.2.tar.gz",
-                    "sha256": "882a7266fa867a2ebb2c0baaa0f9159cabf131cf18c1b4270d79ad42f9208dc5"
-                }
-            ]
-        },
-        {
-            "name": "briar-headless",
-            "buildsystem": "simple",
-            "build-commands": [
-                "mkdir -p /app/briar",
-                "install -Dm644 briar-headless.jar /app/briar/briar-headless.jar"
-            ],
-            "sources": [
-                {
-                    "type": "file",
-                    "url": "https://media.dorfbrunnen.eu/briar/jars/007/briar-headless.jar",
-                    "sha256": "3dea594a88be91d2b40a61adcfdf03432dc9e3c2865317ccd7799e13321200ec"
-                }
-            ]
-        },
-        {
-            "name": "briar-gtk",
-            "buildsystem": "meson",
-            "config-opts": [
-                "--libdir=lib"
-            ],
-            "builddir": true,
-            "sources": [
-                {
-                    "type": "dir",
-                    "path": "."
-                }
-            ]
-        }
-    ]
-}
diff --git a/code-of-conduct.md b/code-of-conduct.md
deleted file mode 100644
index c17d4d5..0000000
--- a/code-of-conduct.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# GNOME Code of Conduct
-
-Thank you for being a part of the GNOME project. We value your participation and want everyone to have an enjoyable and fulfilling experience. Accordingly, all participants are expected to follow this Code of Conduct, and to show respect, understanding, and consideration to one another. Thank you for helping make this a welcoming, friendly community for everyone.
-
-## Scope
-
-This Code of Conduct applies to all online GNOME community spaces, including, but not limited to:
-
- * Issue tracking systems - bugzilla.gnome.org
- * Documentation and tutorials - developer.gnome.org
- * Code repositories - code.briarproject.org/nicoalt/briar-gtk, git.gnome.org and gitlab.gnome.org
- * Mailing lists - mail.gnome.org
- * Wikis - wiki.gnome.org
- * Chat and forums - irc.gnome.org, discourse.gnome.org, GNOME Telegram channels, and GNOME groups and channels on Matrix.org (including bridges to GNOME IRC channels)
- * Community spaces hosted on gnome.org infrastructure
- * Any other channels or groups which exist in order to discuss GNOME project activities
-
-Communication channels and private conversations that are normally out of scope may be considered in scope if a GNOME participant is being stalked or harassed. Social media conversations may be considered in-scope if the incident occurred under a GNOME event hashtag, or when an official GNOME account on social media is tagged, or within any other discussion about GNOME. The GNOME Foundation reserves the right to take actions against behaviors that happen in any context, if they are deemed to be relevant to the GNOME project and its participants.
-
-All participants in GNOME online community spaces are subject to the Code of Conduct. This includes GNOME Foundation board members, corporate sponsors, and paid employees. This also includes volunteers, maintainers, leaders, contributors, contribution reviewers, issue reporters, GNOME users, and anyone participating in discussion in GNOME online spaces.
-
-## Reporting an Incident
-
-If you believe that someone is violating the Code of Conduct, or have
-any other concerns, please [contact the Code of Conduct committee](https://wiki.gnome.org/Foundation/CodeOfConduct/ReporterGuide).
-
-## Our Standards
-
-The GNOME online community is dedicated to providing a positive experience for everyone, regardless of:
-
- * age
- * body size
- * caste
- * citizenship
- * disability
- * education
- * ethnicity
- * familial status
- * gender expression
- * gender identity
- * genetic information
- * immigration status
- * level of experience
- * nationality
- * personal appearance
- * pregnancy
- * race
- * religion
- * sex characteristics
- * sexual orientation
- * sexual identity
- * socio-economic status
- * tribe
- * veteran status
-
-### Community Guidelines
-
-Examples of behavior that contributes to creating a positive environment include:
-
- * **Be friendly.** Use welcoming and inclusive language.
- * **Be empathetic.** Be respectful of differing viewpoints and experiences.
- * **Be respectful.** When we disagree, we do so in a polite and constructive manner.
- * **Be considerate.** Remember that decisions are often a difficult choice between competing priorities. Focus on what is best for the community. Keep discussions around technology choices constructive and respectful.
- * **Be patient and generous.** If someone asks for help it is because they need it. When documentation is available that answers the question, politely point them to it. If the question is off-topic, suggest a more appropriate online space to seek help.
- * **Try to be concise.** Read the discussion before commenting in order to not repeat a point that has been made.
-
-### Inappropriate Behavior
-
-Community members asked to stop any inappropriate behavior are expected to comply immediately.
-
-We want all participants in the GNOME community have the best possible experience they can. In order to be clear what that means, we've provided a list of examples of behaviors that are inappropriate for GNOME community spaces:
-
- * **Deliberate intimidation, stalking, or following.**
- * **Sustained disruption of online discussion, talks, or other events.** Sustained disruption of events, online discussions, or meetings, including talks and presentations, will not be tolerated. This includes 'Talking over' or 'heckling' event speakers or influencing crowd actions that cause hostility in event sessions. Sustained disruption also includes drinking alcohol to excess or using recreational drugs to excess, or pushing others to do so.
- * **Harassment of people who don't drink alcohol.** We do not tolerate derogatory comments about those who abstain from alcohol or other substances. We do not tolerate pushing people to drink, talking about their abstinence or preferences to others, or pressuring them to drink - physically or through jeering.
- * **Sexist, racist, homophobic, transphobic, ableist language or otherwise exclusionary language.** This includes deliberately referring to someone by a gender that they do not identify with, and/or questioning the legitimacy of an individual's gender identity. If you're unsure if a word is derogatory, don't use it. This also includes repeated subtle and/or indirect discrimination.
- * **Unwelcome sexual attention or behavior that contributes to a sexualized environment.** This includes sexualized comments, jokes or imagery in interactions, communications or presentation materials, as well as inappropriate touching, groping, or sexual advances. Sponsors should not use sexualized images, activities, or other material. Meetup organizing staff and other volunteer organizers should not use sexualized clothing/uniforms/costumes, or otherwise create a sexualized environment.
- * **Unwelcome physical contact.** This includes touching a person without permission, including sensitive areas such as their hair, pregnant stomach, mobility device (wheelchair, scooter, etc) or tattoos. This also includes physically blocking or intimidating another person. Physical contact or simulated physical contact (such as emojis like "kiss") without affirmative consent is not acceptable. This includes sharing or distribution of sexualized images or text.
- * **Violence or threats of violence.** Violence and threats of violence are not acceptable - online or offline. This includes incitement of violence toward any individual, including encouraging a person to commit self-harm. This also includes posting or threatening to post other people's personally identifying information ("doxxing") online.
- * **Influencing or encouraging inappropriate behavior.** If you influence or encourage another person to violate the Code of Conduct, you may face the same consequences as if you had violated the Code of Conduct.
- * **Possession of an offensive weapon at a GNOME event.** This includes anything deemed to be a weapon by the event organizers.
-
-The GNOME community prioritizes marginalized people's safety over privileged people's comfort. The committee will not act on complaints regarding:
-
- * "Reverse"-isms, including "reverse racism," "reverse sexism," and "cisphobia"
- * Reasonable communication of boundaries, such as "leave me alone," "go away," or "I'm not discussing this with you."
- * Criticizing racist, sexist, cissexist, or otherwise oppressive behavior or assumptions
- * Communicating boundaries or criticizing oppressive behavior in a "tone" you don't find congenial
-
-The examples listed above are not against the Code of Conduct. If you have questions about the above statements, please [read this document](https://github.com/sagesharp/code-of-conduct-template/blob/master/code-of-conduct/example-reversisms.md#supporting-diversity).
-
-If a participant engages in behavior that violates this code of conduct, the GNOME Code of Conduct committee may take any action they deem appropriate. Examples of consequences are outlined in the [Committee Procedures Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/CommitteeProcedures).
-
-## Procedure for Handling Incidents
-
- * [Reporter Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/ReporterGuide)
-
- * [Moderator Procedures](https://wiki.gnome.org/Foundation/CodeOfConduct/ModeratorProcedures)
-
- * [Committee Procedures Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/CommitteeProcedures)
-
-## License
-
-The GNOME Online Code of Conduct is licensed under a [Creative Commons Attribution Share-Alike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/)
-
-![Creative Commons License](http://i.creativecommons.org/l/by-sa/3.0/88x31.png)
-
-## Attribution
-
-The GNOME Online Code of Conduct was forked from the example policy from the [Geek Feminism wiki, created by the Ada Initiative and other volunteers](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy), which is under a Creative Commons Zero license.
-
-Additional language was incorporated and modified from the following Codes of Conduct:
-
- * [Citizen Code of Conduct](http://citizencodeofconduct.org/) is licensed [Creative Commons Attribution Share-Alike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/).
- * [Code of Conduct template](https://github.com/sagesharp/code-of-conduct-template/) is licensed [Creative Commons Attribution Share-Alike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/) by [Otter Tech](https://otter.technology/code-of-conduct-training)
- * [Contributor Covenant version 1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct) (licensed [CC BY 4.0](https://github.com/ContributorCovenant/contributor_covenant/blob/master/LICENSE.md))
- * [Data Carpentry Code of Conduct](https://docs.carpentries.org/topic_folders/policies/index_coc.html) is licensed [Creative Commons Attribution 4.0 License](https://creativecommons.org/licenses/by/4.0/)
- * [Django Project Code of Conduct](https://www.djangoproject.com/conduct/) is licensed under a [Creative Commons Attribution 3.0 Unported License](http://creativecommons.org/licenses/by/3.0/)
- * [Fedora Code of Conduct](http://fedoraproject.org/code-of-conduct)
- * [Geek Feminism Anti-harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy) which is under a [Creative Commons Zero license](https://creativecommons.org/publicdomain/zero/1.0/)
- * [Previous GNOME Foundation Code of Conduct](https://wiki.gnome.org/action/recall/Foundation/CodeOfConduct/Old)
- * [LGBTQ in Technology Slack Code of Conduct](https://lgbtq.technology/coc.html) licensed [Creative Commons Zero](https://creativecommons.org/publicdomain/zero/1.0/)
- * [Mozilla Community Participation Guidelines](https://www.mozilla.org/en-US/about/governance/policies/participation/) is licensed [Creative Commons Attribution-ShareAlike 3.0 Unported License](https://creativecommons.org/licenses/by-sa/3.0/).
- * [Python Mentors Code of Conduct](http://pythonmentors.com/)
- * [Speak Up! Community Code of Conduct](http://web.archive.org/web/20141109123859/http://speakup.io/coc.html), licensed under a [Creative Commons Attribution 3.0 Unported License](http://creativecommons.org/licenses/by/3.0/)
-
diff --git a/data/app.briar.gtk.appdata.xml.in b/data/app.briar.gtk.appdata.xml.in
deleted file mode 100644
index 7cd381c..0000000
--- a/data/app.briar.gtk.appdata.xml.in
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component type="desktop">
-  <id>app.briar.gtk</id>
-  <metadata_license>CC-BY-4.0</metadata_license>
-  <project_license>AGPL-3.0-only</project_license>
-  <summary>Keeps the information flowing in a crisis</summary>
-  <description>
-    <p>
-      Briar is a messaging app designed for activists, journalists, and anyone
-      else who needs a safe, easy and robust way to communicate. Unlike
-      traditional messaging apps, Briar doesn't rely on a central server -
-      messages are synchronized directly between the users' devices. If the
-      internet's down, Briar can sync via Bluetooth or Wi-Fi, keeping the
-      information flowing in a crisis. If the internet's up, Briar can sync via
-      the Tor network, protecting users and their relationships from
-      surveillance.
-    </p>
-  </description>
-</component>
diff --git a/data/app.briar.gtk.desktop.in b/data/app.briar.gtk.desktop.in
deleted file mode 100644
index 890ff74..0000000
--- a/data/app.briar.gtk.desktop.in
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Name=Briar
-Comment=Keeps the information flowing in a crisis
-Keywords=Briar;
-Icon=app.briar.gtk
-Exec=briar-gtk
-Terminal=false
-Type=Application
-Categories=GNOME;GTK;
-StartupNotify=true
diff --git a/data/app.briar.gtk.gschema.xml b/data/app.briar.gtk.gschema.xml
deleted file mode 100644
index acbc4ee..0000000
--- a/data/app.briar.gtk.gschema.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<schemalist gettext-domain="briar_gtk">
-	<schema id="app.briar.gtk" path="/app/briar/gtk/">
-	</schema>
-</schemalist>
diff --git a/data/icons/hicolor/16x16/apps/app.briar.gtk.png b/data/icons/hicolor/16x16/apps/app.briar.gtk.png
deleted file mode 100644
index 444bf9836e125daa79f21882ff9b6529835d2b13..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1093
zcmV-L1iJf)P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;*
zaB^>EX>4Tx04R}tkv&MmKpe$iTWdut4t9{@kfAzR5ET(zv<gM25Nd^19ZW9$5Slb3
zDK3tJYr(;f#j1mgv#t)Vf*|+-;^OM0=prTlFDbN$@!+^0@9sVB-U0r4nW<*SD4=SV
zkxnLrY;Hvey`mFA^dO39iJAJWD5l^!zV6}U>s_2@d7t}p^eTCi0X~6vhUtbyyiPp1
zY3ZEzi6g8eDa7Z*BL-cN_>t?f%Ws^E4*Pj##K@%Qh$F;8v5n<6W+g)<o*<4Xsz&+#
ztjh}LEzWAW%9{7&FAV3k<t47u97GZeScC`xGOE}>85ZKSYNVJ*(|*FkA9eg9xny!}
zfRSS!6{wILKlmT~?$#`fkGV<V1Q2|&?T;ZKv<oz9w*7r<+l><-@C;mOEq|pBOns7G
zYiY3~pl=(vxNd3k9&ot>3_R(QAvscjroT`C-p}ZpazOtr(7o#R*4)SG1CXJvQa8ZC
zAuwE|>@|;fceVHS@0n(QKXQd~rw*SU+5i9m24YJ`L;(K){{a7>y{D4^000SaNLh0L
z01ejw01ejxLMWSf00007bV*G`2jd0>3mXwDNy3)^00KctL_t(I%Z-!WOOs(3#((d-
z4<$FVDM;DsAWMA9`U9dUs{@IM4kA1Wp`e5MBRY{z(v&QsgP@M=10f3gP_u+}5R!&V
zR=B334n>{Y{Fu7!>SP-^GrHh`hwHho>%O_4`-VJ7s*%(x$uDU!bNrH8BpqTaNGgzY
zUs6h2BPpp(lJjrk50bQy7}u-7b%i1ybE=WKF1`M7L-Eycmg>oxm>G{2;3UAv+&la;
zPx(6aD3_pr>LEkZ?F8q0vQ#b51Yk(20R|V>r_AwqABkjyrL`HHHW%)KU6_W0Z<Egm
zMS7{-cN14(8GGF)C~}mifFpL`Dq#A;jRd2en|f1VE5=0?04vE^`X_HwRdRt--ewzc
z#SWYXI8bt)wNwnD4F(Rgh*&%VfXyt#>pDhd$+_(F86?I3Z1X_)vF?1X)XTuN9M?W{
zQMdZaG!TB0|0^*QHl|FbS4kunSWhkUACMvGJ7A5)dkI8du+8w|8*O5LX&uFG4{5D$
zP#73ko_cn>jsp1YKo?*IBF_m%-%wqAIT!pZ`j(VdH>EWVN7mrIkr~gy*xI;lV$nx*
zd74k5M)sH1VeLGNlqR-1$$DyuB4;^;_U(Ax$8kF<Qov!;FbqHNpxC(w%TtfjbmdB|
z-f;=bQ_tAk7kr^MY-tykryjSX0^puu7{l37c1r4&q{zysI))n*obS%H`sZw?I))n*
zO-y8|E=i93eQ-*;n^~BDEmP|zah}mZNzIamGBXm-+?ym>`SHI2>4Lm*^M&OF00000
LNkvXXu0mjf<`?<x

diff --git a/data/icons/hicolor/22x22/apps/app.briar.gtk.png b/data/icons/hicolor/22x22/apps/app.briar.gtk.png
deleted file mode 100644
index 8e6f76131fa4ac2e75d3cf227fd69b643ed5dec9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1271
zcmV<T1PJ?yP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX0004nX+uL$Nkc;*
zaB^>EX>4Tx04R}tkv&MmKpe$iTWdut4t9{@5U@H~5EXIMDionYs1;guFuC+YXws0R
zxHt-~1qVMCs}3&Cx;nTDg5U>;i>s5Oi<J1kq|hS9gX4a@yZ5+z2l(q{rkWjNfT~$W
zI++l%xfLPwicSR4gD8e1X6mz|n1bi{x`&UicX6KOeeTcEtK>}v_ypn^rW+RVI`Pz|
zrE}gVj<AxX5T6r|8gxP8N3P2*zi}=)?B|&gBa@yZjt~pQHkR9%l?;`5k~pTQ8s+=5
zE-Re3IIHC<Yu=N;Fr3$xm$*)I5J@ax5h4W0sA2<UScucAkzyiE`w0(!)bWetlF79J
zMvi$@ph9x|;D7MDTeC1R?k0s3K=8%3KZb$OF3_mi_V=-EH%@@SGjOG~{FOQ|{YiSQ
zrNxebzHQ**x~0i`z~v4w@T5zI<VXRU{z3tGKcjET0sXf?_o~}lb04P<K!&<X-2exN
zz(|p@*F4_c)!y5`XPW)}05;8XkKw~YP5=M^24YJ`L;(K){{a7>y{D4^000SaNLh0L
z01ejw01ejxLMWSf00007bV*G`2jd0>3mP>JQ5OdQ00Q$#L_t(I%e9qFNK{c2$A9<v
zCdbJfbp|wN?88jN#3+J_f&v5EWJa5ERl6XF2#F|yHW3IF)S_**2_h=3MMY5%NJeEA
z*@vRz2WDoz8E0rdbmp{Z-s>rjme3y_-1F`^zk3ho-g6ZhBqD`C15giC0{-;W5bzOb
z1@0=P4E{zUk|QFgL?k5hD<~o-MI>iFXo-ltlz&%;h%Czl^^3@m>Dlw+kzDJjlh#j%
zB$-NBgvn%7?sOfLYaKf!U_7_O2SvnZ@-#DjparldI=)_IIQ*Iqqqi9Q`Ni76NaP)#
z#_lm3e#P67>-N3*fx9B&w7@_Uu-@+Fa(KvhE+^l)9A&vdN~UaCCTAwT0XPbv($((+
z^7_M1`E1-qNM)>p&$X5NACCY~>8;1(_7h7QR2A;Ww|Fx^2w15Ddw@KEwy)<f;@xu=
z*t@8Dn%y6M#zbO(iNqj#SKR?{1G_a~m+7=*Q3(sx5{J)j*6Y9;)7rW03g4ogh$Jzh
zeI$}$0192@I5ZakvB}6ZU~TDnM3NM_*4cko=|Hh*=~@oH#hU<V3tXnxcmlwIb&n~|
zT?@cKsBIc}scXZmrO^04O6kBbPyvvX1V+4vEajNyHJOU=J^CI1rKPAXKa)O^UcN`)
zqf{1!*%fF?H$#SXpvwe595_s1;xQg)B?`9%9*w@Ey}x<REmq_=u%q;%X?AJpE(Jg+
z9$0Yh!9<_kY|+zKIRv;j7B|r~euG>`38V2|%PTv}jX!rwMyRG7)OZe9YXGgfQfgd8
znt`)rd3BWK)d6tR*!SmBIM-0^ZM1sDgYIJhtjOQS_LZk+u5(T)6*N!91>lu^Rw>Ok
z&a%c+sVF0nPDUb~gyI7;p)Y|;0Q&Dh6%&yL;Dz~8)D$%mj0N!Itj6oAup*0cYbYzI
zWg<RAO;MvAItc7hO2slY`t}7h`ZpOHy$$XZkrU}>XFeGsa$H2RXL8gW3lspm)8A~5
hX$#PzlnTxk{|nzk`GCglpm6{I002ovPDHLkV1oKONBaN(

diff --git a/data/icons/hicolor/256x256/apps/app.briar.gtk.png b/data/icons/hicolor/256x256/apps/app.briar.gtk.png
deleted file mode 100644
index b39b6bcd44139511ac347b876f58ec9c27ca7198..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7597
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

diff --git a/data/icons/hicolor/32x32/apps/app.briar.gtk.png b/data/icons/hicolor/32x32/apps/app.briar.gtk.png
deleted file mode 100644
index ab51897e28cca7df9d0c0881d3fa238f8f922629..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1600
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

diff --git a/data/icons/hicolor/48x48/apps/app.briar.gtk.png b/data/icons/hicolor/48x48/apps/app.briar.gtk.png
deleted file mode 100644
index 0e014d34ee88b7909f74d3af3ccdf141cc0f4372..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1996
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

diff --git a/data/icons/hicolor/512x512/apps/app.briar.gtk.png b/data/icons/hicolor/512x512/apps/app.briar.gtk.png
deleted file mode 100644
index ed21404b901537b9044d206633125db15e227f80..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15117
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
Q;1z<<>bkc}RjvO0Kj&vBasU7T

diff --git a/data/icons/hicolor/scalable/apps/app.briar.gtk.svg b/data/icons/hicolor/scalable/apps/app.briar.gtk.svg
deleted file mode 100644
index 3acaa5e..0000000
--- a/data/icons/hicolor/scalable/apps/app.briar.gtk.svg
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="Ebene_1"
-   x="0px"
-   y="0px"
-   viewBox="0 0 330.00001 330.00001"
-   xml:space="preserve"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="logo_circle.svg"
-   width="330"
-   height="330"><metadata
-     id="metadata61"><rdf:RDF><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-     id="defs59" /><sodipodi:namedview
-     pagecolor="#000000"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1021"
-     id="namedview57"
-     showgrid="false"
-     inkscape:zoom="1.4333435"
-     inkscape:cx="137.64067"
-     inkscape:cy="223.06028"
-     inkscape:window-x="1440"
-     inkscape:window-y="23"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="Ebene_1" /><style
-     type="text/css"
-     id="style3">
-	.st0{fill:#FFFFFF;}
-	.st1{display:none;fill:#87C214;}
-	.st2{fill:#87C214;}
-	.st3{display:none;fill:#FFFFFF;}
-	.st4{fill:#95D220;}
-	.st5{display:none;fill:#95D220;}
-</style><circle
-     style="fill:#ffffff"
-     id="circle7"
-     cy="165"
-     cx="165"
-     class="st0"
-     r="165" /><g
-     id="g4214"
-     transform="translate(0.2999939,1.2000061)"><g
-       id="g9"><g
-         id="g11"><rect
-           x="94"
-           y="93.800003"
-           class="st1"
-           width="43.700001"
-           height="43.700001"
-           id="rect13"
-           style="display:none;fill:#87c214" /><path
-           class="st2"
-           d="M 94,144.5 94,264 c 0,9.7 7.9,17.7 17.7,17.7 l 8.3,0 c 9.7,0 17.7,-8 17.7,-17.7 l 0,-119.5 -43.7,0 z"
-           id="path15"
-           inkscape:connector-curvature="0"
-           style="fill:#87c214" /><path
-           class="st2"
-           d="m 137.7,86.8 0,-22.5 c 0,-9.7 -8,-17.7 -17.7,-17.7 l -8.3,0 C 102,46.6 94,54.6 94,64.3 l 0,22.5 43.7,0 z"
-           id="path17"
-           inkscape:connector-curvature="0"
-           style="fill:#87c214" /></g><path
-         class="st3"
-         d="m 120,46.7 c 9.7,0 17.7,8 17.7,17.7 l 0,199.6 c 0,9.7 -8,17.7 -17.7,17.7 l -8.3,0 C 102,281.7 94,273.7 94,264 L 94,64.3 c 0,-9.7 7.9,-17.7 17.7,-17.7 l 8.3,0 m 0,-6.9 -8.3,0 C 98.1,39.7 87,50.7 87,64.3 L 87,264 c 0,13.6 11.1,24.7 24.7,24.7 l 8.3,0 c 13.6,0 24.7,-11.1 24.7,-24.7 l 0,-199.7 C 144.7,50.7 133.6,39.7 120,39.7 l 0,0 z"
-         id="path19"
-         inkscape:connector-curvature="0"
-         style="display:none;fill:#ffffff" /></g><g
-       id="g21"><g
-         id="g23"><path
-           class="st2"
-           d="m 234.7,183.8 0,-119.5 c 0,-9.7 -7.9,-17.7 -17.7,-17.7 l -8.3,0 c -9.7,0 -17.7,8 -17.7,17.7 l 0,119.5 43.7,0 z"
-           id="path25"
-           inkscape:connector-curvature="0"
-           style="fill:#87c214" /><rect
-           x="191"
-           y="190.8"
-           class="st1"
-           width="43.700001"
-           height="43.700001"
-           id="rect27"
-           style="display:none;fill:#87c214" /><path
-           class="st2"
-           d="m 191,241.5 0,22.5 c 0,9.7 8,17.7 17.7,17.7 l 8.3,0 c 9.7,0 17.7,-8 17.7,-17.7 l 0,-22.5 -43.7,0 z"
-           id="path29"
-           inkscape:connector-curvature="0"
-           style="fill:#87c214" /></g><path
-         class="st3"
-         d="m 217,46.7 c 9.7,0 17.7,8 17.7,17.7 l 0,199.6 c 0,9.7 -7.9,17.7 -17.7,17.7 l -8.3,0 c -9.7,0 -17.7,-8 -17.7,-17.7 l 0,-199.7 c 0,-9.7 8,-17.7 17.7,-17.7 l 8.3,0 m 0,-6.9 -8.3,0 C 195.1,39.7 184,50.8 184,64.4 l 0,199.6 c 0,13.6 11.1,24.7 24.7,24.7 l 8.3,0 c 13.6,0 24.7,-11.1 24.7,-24.7 l 0,-199.7 C 241.7,50.7 230.6,39.7 217,39.7 l 0,0 z"
-         id="path31"
-         inkscape:connector-curvature="0"
-         style="display:none;fill:#ffffff" /></g><g
-       id="g33"><g
-         id="g35"><path
-           class="st4"
-           d="m 87,190.8 -22.5,0 c -9.7,0 -17.7,7.9 -17.7,17.7 l 0,8.3 c 0,9.7 7.9,17.7 17.7,17.7 l 22.5,0 0,-43.7 z"
-           id="path37"
-           inkscape:connector-curvature="0"
-           style="fill:#95d220" /><rect
-           x="94"
-           y="190.8"
-           class="st5"
-           width="43.700001"
-           height="43.700001"
-           id="rect39"
-           style="display:none;fill:#95d220" /><path
-           class="st4"
-           d="m 264.2,190.8 -119.5,0 0,43.7 119.5,0 c 9.7,0 17.7,-8 17.7,-17.7 l 0,-8.3 c -0.1,-9.7 -8,-17.7 -17.7,-17.7 z"
-           id="path41"
-           inkscape:connector-curvature="0"
-           style="fill:#95d220" /></g><path
-         class="st3"
-         d="m 264.2,190.8 c 9.7,0 17.7,7.9 17.7,17.7 l 0,8.3 c 0,9.7 -8,17.7 -17.7,17.7 l -199.7,0 c -9.7,0 -17.7,-8 -17.7,-17.7 l 0,-8.3 c 0,-9.7 7.9,-17.7 17.7,-17.7 l 199.7,0 m 0,-7 -199.7,0 c -13.6,0 -24.7,11.1 -24.7,24.7 l 0,8.3 c 0,13.6 11.1,24.7 24.7,24.7 l 199.7,0 c 13.6,0 24.7,-11.1 24.7,-24.7 l 0,-8.3 c -0.1,-13.6 -11.1,-24.7 -24.7,-24.7 l 0,0 z"
-         id="path43"
-         inkscape:connector-curvature="0"
-         style="display:none;fill:#ffffff" /></g><g
-       id="g45"><g
-         id="g47"><rect
-           x="191"
-           y="93.800003"
-           class="st5"
-           width="43.700001"
-           height="43.700001"
-           id="rect49"
-           style="display:none;fill:#95d220" /><path
-           class="st4"
-           d="m 184,93.8 -119.5,0 c -9.7,0 -17.7,7.9 -17.7,17.7 l 0,8.3 c 0,9.7 7.9,17.7 17.7,17.7 l 119.5,0 0,-43.7 z"
-           id="path51"
-           inkscape:connector-curvature="0"
-           style="fill:#95d220" /><path
-           class="st4"
-           d="m 264.2,93.8 -22.5,0 0,43.7 22.5,0 c 9.7,0 17.7,-7.9 17.7,-17.7 l 0,-8.3 c -0.1,-9.7 -8,-17.7 -17.7,-17.7 z"
-           id="path53"
-           inkscape:connector-curvature="0"
-           style="fill:#95d220" /></g><path
-         class="st3"
-         d="m 264.2,93.8 c 9.7,0 17.7,7.9 17.7,17.7 l 0,8.3 c 0,9.7 -8,17.7 -17.7,17.7 l -199.7,0 c -9.7,0 -17.7,-7.9 -17.7,-17.7 l 0,-8.3 c 0,-9.7 7.9,-17.7 17.7,-17.7 l 199.7,0 m 0,-7 -199.7,0 c -13.6,0 -24.7,11.1 -24.7,24.7 l 0,8.3 c 0,13.6 11.1,24.7 24.7,24.7 l 199.7,0 c 13.6,0 24.7,-11.1 24.7,-24.7 l 0,-8.3 C 288.8,97.9 277.8,86.8 264.2,86.8 l 0,0 z"
-         id="path55"
-         inkscape:connector-curvature="0"
-         style="display:none;fill:#ffffff" /></g></g></svg>
\ No newline at end of file
diff --git a/data/icons/meson.build b/data/icons/meson.build
deleted file mode 100644
index 3c5fe25..0000000
--- a/data/icons/meson.build
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-icon_themes = ['hicolor']
-foreach theme : icon_themes
-  install_subdir(theme, install_dir: 'share/icons/')
-endforeach
diff --git a/data/meson.build b/data/meson.build
deleted file mode 100644
index 00ec5c1..0000000
--- a/data/meson.build
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-desktop_file = i18n.merge_file(
-  input: 'app.briar.gtk.desktop.in',
-  output: 'app.briar.gtk.desktop',
-  type: 'desktop',
-  po_dir: '../po',
-  install: true,
-  install_dir: join_paths(get_option('datadir'), 'applications')
-)
-
-desktop_utils = find_program('desktop-file-validate', required: false)
-if desktop_utils.found()
-  test('Validate desktop file', desktop_utils,
-    args: [desktop_file]
-  )
-endif
-
-appstream_file = i18n.merge_file(
-  input: 'app.briar.gtk.appdata.xml.in',
-  output: 'app.briar.gtk.appdata.xml',
-  po_dir: '../po',
-  install: true,
-  install_dir: join_paths(get_option('datadir'), 'appdata')
-)
-
-appstream_util = find_program('appstream-util', required: false)
-if appstream_util.found()
-  test('Validate appstream file', appstream_util,
-    args: ['validate', appstream_file]
-  )
-endif
-
-install_data('app.briar.gtk.gschema.xml',
-  install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas')
-)
-
-compile_schemas = find_program('glib-compile-schemas', required: false)
-if compile_schemas.found()
-  test('Validate schema file', compile_schemas,
-    args: ['--strict', '--dry-run', meson.current_source_dir()]
-  )
-endif
-
-pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name())
-gnome = import('gnome')
-
-gnome.compile_resources('briar-gtk',
-  'ui/app.briar.gtk.gresource.xml',
-  gresource_bundle: true,
-  install: true,
-  install_dir: pkgdatadir,
-)
-
-subdir('icons')
diff --git a/data/ui/add_contact.ui b/data/ui/add_contact.ui
deleted file mode 100644
index 5ef80c3..0000000
--- a/data/ui/add_contact.ui
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2019 Nico Alt
-  SPDX-License-Identifier: AGPL-3.0-only
-  License-Filename: LICENSE.md
-
-  Based on parts of GNOME Fractal
-  https://gitlab.gnome.org/GNOME/fractal/blob/4.2.2/fractal-gtk/res/ui/login_flow.ui
--->
-<interface>
-  <requires lib="gtk+" version="3.22"/>
-  <object class="GtkStack" id="add_contact_flow_stack">
-    <property name="can_focus">False</property>
-    <property name="hhomogeneous">True</property>
-    <property name="transition_type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
-    <child>
-      <object class="GtkGrid" id="links_page">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="halign">center</property>
-        <property name="valign">center</property>
-        <property name="column_spacing">12</property>
-        <property name="row_spacing">24</property>
-        <child>
-          <object class="GtkLabel">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes" context="add contact">Give this link to the contact you want to add</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <property name="mnemonic_widget">own_link_entry</property>
-            <style>
-              <class name="dim-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">1</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="own_link_entry">
-            <property name="visible">True</property>
-            <property name="max_width_chars">-1</property>
-            <property name="width_request">232</property>
-            <property name="can_focus">True</property>
-            <property name="input_purpose">GTK_INPUT_PURPOSE_URL</property>
-          </object>
-          <packing>
-            <property name="top-attach">2</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes" context="add contact">Enter the link from your contact here</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <property name="mnemonic_widget">their_link_entry</property>
-            <style>
-              <class name="dim-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">3</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="their_link_entry">
-            <property name="visible">True</property>
-            <property name="max_width_chars">-1</property>
-            <property name="width_request">232</property>
-            <property name="can_focus">True</property>
-            <property name="placeholder_text" translatable="yes" context="add contact">Contact's link</property>
-            <property name="input_purpose">GTK_INPUT_PURPOSE_URL</property>
-          </object>
-          <packing>
-            <property name="top-attach">4</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="link_error_label">
-            <property name="visible">False</property>
-            <property name="can_focus">False</property>
-            <property name="no_show_all">True</property>
-            <property name="label" translatable="yes" context="add contact">Please enter a link</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <style>
-              <class name="error-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">5</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">links</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkGrid" id="alias_page">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="halign">center</property>
-        <property name="valign">center</property>
-        <property name="column_spacing">12</property>
-        <property name="row_spacing">24</property>
-        <child>
-          <object class="GtkLabel">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes" context="add contact">Give your contact a nickname. Only you can see it.</property>
-            <property name="halign">end</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <property name="mnemonic_widget">own_link_entry</property>
-            <style>
-              <class name="dim-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">1</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="alias_entry">
-            <property name="visible">True</property>
-            <property name="max_width_chars">-1</property>
-            <property name="width_request">232</property>
-            <property name="can_focus">True</property>
-            <property name="placeholder_text" translatable="yes" context="add contact">Enter a nickname</property>
-          </object>
-          <packing>
-            <property name="top-attach">2</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="alias_error_label">
-            <property name="visible">False</property>
-            <property name="can_focus">False</property>
-            <property name="no_show_all">True</property>
-            <property name="xalign">0</property>
-            <property name="label" translatable="yes" context="add contact">The alias may not be empty</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <style>
-              <class name="error-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">3</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">alias</property>
-      </packing>
-    </child>
-  </object>
-  <object class="GtkStack" id="add_contact_flow_headers">
-    <property name="can_focus">False</property>
-    <property name="hhomogeneous">True</property>
-    <property name="visible_child_name" bind-source="add_contact_flow_stack" bind-property="visible-child-name" bind-flags="sync-create"/>
-    <property name="transition_duration" bind-source="add_contact_flow_stack" bind-property="transition-duration" bind-flags="sync-create"/>
-    <property name="transition_type" bind-source="add_contact_flow_stack" bind-property="transition-type" bind-flags="sync-create"/>
-    <child>
-      <object class="GtkHeaderBar">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="show_close_button">True</property>
-        <property name="width_request">360</property>
-        <property name="title">Add contact</property>
-        <child>
-          <object class="GtkButton">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <signal name="clicked" handler="on_link_back_pressed"/>
-            <child>
-              <object class="GtkImage">
-                <property name="visible">True</property>
-                <property name="icon_name">go-previous-symbolic</property>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="pack_type">start</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">True</property>
-            <property name="label" translatable="yes">Next</property>
-            <signal name="clicked" handler="on_links_next_pressed"/>
-            <style>
-              <class name="suggested-action"/>
-            </style>
-          </object>
-          <packing>
-            <property name="pack_type">end</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">links</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkHeaderBar">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="show_close_button">True</property>
-        <property name="title" translatable="yes">Add contact</property>
-        <child>
-          <object class="GtkButton">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <signal name="clicked" handler="on_alias_back_pressed"/>
-            <child>
-              <object class="GtkImage">
-                <property name="visible">True</property>
-                <property name="icon_name">go-previous-symbolic</property>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="pack_type">start</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">True</property>
-            <property name="label" translatable="yes">Add contact</property>
-            <signal name="clicked" handler="on_add_contact_pressed"/>
-            <style>
-              <class name="suggested-action"/>
-            </style>
-          </object>
-          <packing>
-            <property name="pack_type">end</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">alias</property>
-      </packing>
-    </child>
-  </object>
-</interface>
-
diff --git a/data/ui/app.briar.gtk.gresource.xml b/data/ui/app.briar.gtk.gresource.xml
deleted file mode 100644
index 8cd71a2..0000000
--- a/data/ui/app.briar.gtk.gresource.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gresources>
-  <gresource prefix="/app/briar/gtk">
-    <file compressed="true">ui/application.css</file>
-    <file compressed="true" preprocess="xml-stripblanks">ui/add_contact.ui</file>
-    <file compressed="true" preprocess="xml-stripblanks">ui/chat.ui</file>
-    <file compressed="true" preprocess="xml-stripblanks">ui/login.ui</file>
-    <file compressed="true" preprocess="xml-stripblanks">ui/main.ui</file>
-    <file compressed="true" preprocess="xml-stripblanks">ui/registration.ui</file>
-    <file compressed="true" preprocess="xml-stripblanks">ui/toolbar_start.ui</file>
-  </gresource>
-</gresources>
diff --git a/data/ui/application.css b/data/ui/application.css
deleted file mode 100644
index 430e318..0000000
--- a/data/ui/application.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.error-label {
-  color: @error_color;
-}
-
diff --git a/data/ui/chat.ui b/data/ui/chat.ui
deleted file mode 100644
index e779caf..0000000
--- a/data/ui/chat.ui
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2019 Nico Alt
-  SPDX-License-Identifier: AGPL-3.0-only
-  License-Filename: LICENSE.md
--->
-<interface>
-  <requires lib="gtk+" version="3.20"/>
-  <object class="GtkGrid" id="chat">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="halign">center</property>
-    <property name="valign">center</property>
-    <property name="margin_left">18</property>
-    <property name="margin_right">18</property>
-    <property name="margin_top">18</property>
-    <property name="margin_bottom">18</property>
-    <child>
-      <object class="GtkListBox" id="messages_list">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="hexpand">True</property>
-      </object>
-      <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkEntry" id="chat_entry">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="placeholder_text" translatable="yes" context="chat page: input field">Type Message</property>
-        <property name="show_emoji_icon">True</property>
-      </object>
-      <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-  </object>
-</interface>
diff --git a/data/ui/login.ui b/data/ui/login.ui
deleted file mode 100644
index 3ac5a59..0000000
--- a/data/ui/login.ui
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2019 Nico Alt
-  SPDX-License-Identifier: AGPL-3.0-only
-  License-Filename: LICENSE.md
-
-  Based on parts of GNOME Fractal
-  https://gitlab.gnome.org/GNOME/fractal/blob/4.2.2/fractal-gtk/res/ui/login_flow.ui
--->
-<interface>
-  <requires lib="gtk+" version="3.22"/>
-  <object class="GtkStack" id="login_flow_stack">
-    <property name="can_focus">False</property>
-    <property name="hhomogeneous">True</property>
-    <property name="transition_type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
-    <child>
-      <object class="GtkGrid" id="login_page">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="halign">center</property>
-        <property name="valign">center</property>
-        <property name="column_spacing">12</property>
-        <property name="row_spacing">24</property>
-        <child>
-          <object class="GtkLabel">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">Password</property>
-            <property name="halign">end</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <property name="mnemonic_widget">password_entry</property>
-            <style>
-              <class name="dim-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">1</property>
-            <property name="left-attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="password_entry">
-            <property name="visible">True</property>
-            <property name="max_width_chars">-1</property>
-            <property name="width_request">232</property>
-            <property name="can_focus">True</property>
-            <property name="visibility">False</property>
-            <property name="input_purpose">GTK_INPUT_PURPOSE_PASSWORD</property>
-          </object>
-          <packing>
-            <property name="top-attach">1</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="error_message">
-            <property name="visible">False</property>
-            <property name="can_focus">False</property>
-            <property name="no_show_all">True</property>
-            <property name="xalign">0</property>
-            <property name="label" translatable="yes">Couldn't log in</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <style>
-              <class name="error-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">2</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">password</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkGrid" id="loading_animation">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="halign">center</property>
-        <property name="valign">center</property>
-        <property name="column_spacing">12</property>
-        <property name="row_spacing">24</property>
-        <child>
-          <object class="GtkSpinner">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="active">True</property>
-          </object>
-        </child>
-      </object>
-      <packing>
-        <property name="name">loading</property>
-      </packing>
-    </child>
-  </object>
-  <object class="GtkStack" id="login_flow_headers">
-    <property name="can_focus">False</property>
-    <property name="hhomogeneous">True</property>
-    <property name="visible_child_name" bind-source="login_flow_stack" bind-property="visible-child-name" bind-flags="sync-create"/>
-    <property name="transition_duration" bind-source="login_flow_stack" bind-property="transition-duration" bind-flags="sync-create"/>
-    <property name="transition_type" bind-source="login_flow_stack" bind-property="transition-type" bind-flags="sync-create"/>
-    <child>
-      <object class="GtkHeaderBar">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="show_close_button">True</property>
-        <property name="title">Briar</property>
-        <child>
-          <object class="GtkButton">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">True</property>
-            <property name="label" translatable="yes">Log in</property>
-            <signal name="clicked" handler="on_login_pressed"/>
-            <style>
-              <class name="suggested-action"/>
-            </style>
-          </object>
-          <packing>
-            <property name="pack_type">end</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">password</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkHeaderBar" id="loading_header">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="show_close_button">True</property>
-        <property name="width_request">360</property>
-        <property name="title" translatable="yes">Logging in</property>
-      </object>
-      <packing>
-        <property name="name">loading</property>
-      </packing>
-    </child>
-  </object>
-</interface>
-
diff --git a/data/ui/main.ui b/data/ui/main.ui
deleted file mode 100644
index ab14dc8..0000000
--- a/data/ui/main.ui
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2019 Nico Alt
-  SPDX-License-Identifier: AGPL-3.0-only
-  License-Filename: LICENSE.md
--->
-<interface>
-  <requires lib="gtk+" version="3.20"/>
-  <object class="GtkListBox" id="contacts_list">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="halign">center</property>
-    <property name="valign">center</property>
-    <property name="margin_left">18</property>
-    <property name="margin_right">18</property>
-    <property name="margin_top">18</property>
-    <property name="margin_bottom">18</property>
-    <property name="hexpand">True</property>
-  </object>
-</interface>
-
-
diff --git a/data/ui/registration.ui b/data/ui/registration.ui
deleted file mode 100644
index d8458f5..0000000
--- a/data/ui/registration.ui
+++ /dev/null
@@ -1,304 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2019 Nico Alt
-  SPDX-License-Identifier: AGPL-3.0-only
-  License-Filename: LICENSE.md
-
-  Based on parts of GNOME Fractal
-  https://gitlab.gnome.org/GNOME/fractal/blob/4.2.2/fractal-gtk/res/ui/login_flow.ui
--->
-<interface>
-  <requires lib="gtk+" version="3.22"/>
-  <object class="GtkStack" id="registration_flow_stack">
-    <property name="can_focus">False</property>
-    <property name="hhomogeneous">True</property>
-    <property name="transition_type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
-    <child>
-      <object class="GtkBox" id="nickname_page">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="halign">center</property>
-        <property name="valign">center</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">18</property>
-        <child>
-          <object class="GtkImage" id="nickname_page_image">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="halign">center</property>
-            <property name="margin_start">18</property>
-            <property name="margin_end">18</property>
-            <property name="margin_top">18</property>
-            <property name="pixel_size">128</property>
-            <property name="icon_name">app.briar.gtk</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">Welcome to Briar</property>
-            <property name="margin_bottom">48</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <attributes>
-              <attribute name="weight" value="ultrabold"/>
-              <attribute name="scale" value="1.7"/>
-            </attributes>
-          </object>
-        </child>
-        <child>
-          <object class="GtkBox">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">6</property>
-            <child>
-              <object class="GtkEntry" id="nickname_entry">
-                <property name="visible">True</property>
-                <property name="halign">center</property>
-                <property name="max_width_chars">-1</property>
-                <property name="width_request">300</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkLabel">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Choose your nickname</property>
-                <property name="wrap">True</property>
-                <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-                <style>
-                  <class name="dim-label"/>
-                  <class name="small-label"/>
-                </style>
-              </object>
-            </child>
-            <child>
-              <object class="GtkLabel" id="nickname_error_label">
-                <property name="visible">False</property>
-                <property name="can_focus">False</property>
-                <property name="no_show_all">True</property>
-                <property name="label" translatable="yes">The nickname may not be empty.</property>
-                <property name="wrap">True</property>
-                <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-                <style>
-                  <class name="error-label"/>
-                </style>
-              </object>
-            </child>
-          </object>
-        </child>
-      </object>
-      <packing>
-        <property name="name">nickname</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkGrid" id="passwords_page">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="halign">center</property>
-        <property name="valign">center</property>
-        <property name="column_spacing">12</property>
-        <property name="row_spacing">24</property>
-        <child>
-          <object class="GtkLabel">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">Password</property>
-            <property name="halign">end</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <property name="mnemonic_widget">password_entry</property>
-            <style>
-              <class name="dim-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">1</property>
-            <property name="left-attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">Confirm Password</property>
-            <property name="halign">end</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <property name="mnemonic_widget">password_confirm_entry</property>
-            <style>
-              <class name="dim-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">2</property>
-            <property name="left-attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="password_entry">
-            <property name="visible">True</property>
-            <property name="max_width_chars">-1</property>
-            <property name="width_request">232</property>
-            <property name="can_focus">True</property>
-            <property name="visibility">False</property>
-            <property name="input_purpose">GTK_INPUT_PURPOSE_PASSWORD</property>
-          </object>
-          <packing>
-            <property name="top-attach">1</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="password_confirm_entry">
-            <property name="visible">True</property>
-            <property name="max_width_chars">-1</property>
-            <property name="width_request">232</property>
-            <property name="can_focus">True</property>
-            <property name="visibility">False</property>
-            <property name="input_purpose">GTK_INPUT_PURPOSE_PASSWORD</property>
-          </object>
-          <packing>
-            <property name="top-attach">2</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="passwords_error_label">
-            <property name="visible">False</property>
-            <property name="can_focus">False</property>
-            <property name="no_show_all">True</property>
-            <property name="xalign">0</property>
-            <property name="label" translatable="yes">The passwords do not match</property>
-            <property name="wrap">True</property>
-            <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
-            <style>
-              <class name="error-label"/>
-            </style>
-          </object>
-          <packing>
-            <property name="top-attach">5</property>
-            <property name="left-attach">1</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">passwords</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkGrid" id="loading_animation">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="halign">center</property>
-        <property name="valign">center</property>
-        <property name="column_spacing">12</property>
-        <property name="row_spacing">24</property>
-        <child>
-          <object class="GtkSpinner">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="active">True</property>
-          </object>
-        </child>
-      </object>
-      <packing>
-        <property name="name">loading</property>
-      </packing>
-    </child>
-  </object>
-  <object class="GtkStack" id="registration_flow_headers">
-    <property name="can_focus">False</property>
-    <property name="hhomogeneous">True</property>
-    <property name="visible_child_name" bind-source="registration_flow_stack" bind-property="visible-child-name" bind-flags="sync-create"/>
-    <property name="transition_duration" bind-source="registration_flow_stack" bind-property="transition-duration" bind-flags="sync-create"/>
-    <property name="transition_type" bind-source="registration_flow_stack" bind-property="transition-type" bind-flags="sync-create"/>
-    <child>
-      <object class="GtkHeaderBar">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="show_close_button">True</property>
-        <property name="width_request">360</property>
-        <property name="title">Briar</property>
-        <child>
-          <object class="GtkButton">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">True</property>
-            <property name="label" translatable="yes">Next</property>
-            <signal name="clicked" handler="on_nickname_next_pressed"/>
-            <style>
-              <class name="suggested-action"/>
-            </style>
-          </object>
-          <packing>
-            <property name="pack_type">end</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">nickname</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkHeaderBar">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="show_close_button">True</property>
-        <property name="title" translatable="yes">Password</property>
-        <child>
-          <object class="GtkButton">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <signal name="clicked" handler="on_create_account_back_pressed"/>
-            <child>
-              <object class="GtkImage">
-                <property name="visible">True</property>
-                <property name="icon_name">go-previous-symbolic</property>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="pack_type">start</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton">
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="can_focus">True</property>
-            <property name="label" translatable="yes">Create Account</property>
-            <signal name="clicked" handler="on_create_account_pressed"/>
-            <style>
-              <class name="suggested-action"/>
-            </style>
-          </object>
-          <packing>
-            <property name="pack_type">end</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="name">passwords</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkHeaderBar">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="show_close_button">True</property>
-        <property name="width_request">360</property>
-        <property name="title" translatable="yes">Creating Account</property>
-      </object>
-      <packing>
-        <property name="name">loading</property>
-      </packing>
-    </child>
-  </object>
-</interface>
-
diff --git a/data/ui/toolbar_start.ui b/data/ui/toolbar_start.ui
deleted file mode 100644
index 31a9392..0000000
--- a/data/ui/toolbar_start.ui
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2019 Nico Alt
-  SPDX-License-Identifier: AGPL-3.0-only
-  License-Filename: LICENSE.md
-
-  Based on parts of GNOME Lollypop
-  https://gitlab.gnome.org/World/lollypop/blob/1.0.12/data/ToolbarPlayback.ui
--->
-<interface>
-  <requires lib="gtk+" version="3.10"/>
-  <object class="GtkImage" id="back_image">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="icon_name">go-previous-symbolic</property>
-  </object>
-  <object class="GtkImage" id="add_contact_image">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="icon_name">list-add-symbolic</property>
-  </object>
-  <object class="GtkBox" id="toolbar_start">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="spacing">5</property>
-    <child>
-      <object class="GtkButton" id="back_button">
-        <property name="visible">False</property>
-        <property name="valign">center</property>
-        <property name="image">back_image</property>
-      </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="add_contact_button">
-        <property name="visible">False</property>
-        <property name="valign">center</property>
-        <property name="image">add_contact_image</property>
-      </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">0</property>
-      </packing>
-    </child>
-  </object>
-</interface>
-
diff --git a/po/LINGUAS b/po/LINGUAS
deleted file mode 100644
index 173f978..0000000
--- a/po/LINGUAS
+++ /dev/null
@@ -1,2 +0,0 @@
-de
-es
diff --git a/po/POTFILES b/po/POTFILES
deleted file mode 100644
index 0963042..0000000
--- a/po/POTFILES
+++ /dev/null
@@ -1,7 +0,0 @@
-data/app.briar.gtk.desktop.in
-data/app.briar.gtk.appdata.xml.in
-data/app.briar.gtk.gschema.xml
-src/window.ui
-src/main.py
-src/window.py
-
diff --git a/po/briar-gtk.pot b/po/briar-gtk.pot
deleted file mode 100644
index abb1ba4..0000000
--- a/po/briar-gtk.pot
+++ /dev/null
@@ -1,111 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-09 01:55+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../data/ui/add_contact.ui:28
-msgid "Give this link to the contact you want to add"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:48
-msgid "Enter the link from your contact here"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:58
-msgctxt "link exchange: their link input field"
-msgid "Contact's link"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:69
-msgctxt "link exchange: button – initiate pairing"
-msgid "Continue"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:89
-msgid "Give your contact a nickname. Only you can see it."
-msgstr ""
-
-#: ../data/ui/add_contact.ui:99
-msgctxt "remote contact adding: alias input field"
-msgid "Enter a nickname"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:110
-msgctxt "remote contact adding: button"
-msgid "Add Contact"
-msgstr ""
-
-#: ../data/ui/chat.ui:33
-msgctxt "chat page: input field"
-msgid "Type Message"
-msgstr ""
-
-#: ../data/ui/login.ui:29 ../data/ui/registration.ui:110
-msgid "Password"
-msgstr ""
-
-#: ../data/ui/login.ui:63
-msgid "Couldn't log in"
-msgstr ""
-
-#: ../data/ui/login.ui:118
-msgid "Log in"
-msgstr ""
-
-#: ../data/ui/login.ui:139
-msgid "Logging in"
-msgstr ""
-
-#: ../data/ui/registration.ui:40
-msgid "Welcome to Briar"
-msgstr ""
-
-#: ../data/ui/registration.ui:68
-msgid "Choose your nickname"
-msgstr ""
-
-#: ../data/ui/registration.ui:82
-msgid "The nickname may not be empty."
-msgstr ""
-
-#: ../data/ui/registration.ui:129
-msgid "Confirm Password"
-msgstr ""
-
-#: ../data/ui/registration.ui:177
-msgid "The passwords do not match"
-msgstr ""
-
-#: ../data/ui/registration.ui:233
-msgid "Next"
-msgstr ""
-
-#: ../data/ui/registration.ui:253
-msgid "Passwords"
-msgstr ""
-
-#: ../data/ui/registration.ui:275
-msgid "Create Account"
-msgstr ""
-
-#: ../data/ui/registration.ui:296
-msgid "Creating Account"
-msgstr ""
-
-#: ../src/briar/gtk/containers/registration.py:137
-msgid "Couldn't register account"
-msgstr ""
diff --git a/po/de.po b/po/de.po
deleted file mode 100644
index 0d74b23..0000000
--- a/po/de.po
+++ /dev/null
@@ -1,128 +0,0 @@
-msgid ""
-msgstr ""
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-09 01:55+0100\n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../data/ui/add_contact.ui:28
-msgid "Give this link to the contact you want to add"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:48
-msgid "Enter the link from your contact here"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:58
-msgctxt "link exchange: their link input field"
-msgid "Contact's link"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:69
-msgctxt "link exchange: button – initiate pairing"
-msgid "Continue"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:89
-msgid "Give your contact a nickname. Only you can see it."
-msgstr ""
-
-#: ../data/ui/add_contact.ui:99
-msgctxt "remote contact adding: alias input field"
-msgid "Enter a nickname"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:110
-msgctxt "remote contact adding: button"
-msgid "Add Contact"
-msgstr ""
-
-#: ../data/ui/chat.ui:33
-msgctxt "chat page: input field"
-msgid "Type Message"
-msgstr "Nachricht eingeben"
-
-#: ../data/ui/login.ui:29 ../data/ui/registration.ui:110
-msgid "Password"
-msgstr "Passwort"
-
-#: ../data/ui/login.ui:63
-msgid "Couldn't log in"
-msgstr ""
-
-#: ../data/ui/login.ui:118
-msgid "Log in"
-msgstr ""
-
-#: ../data/ui/login.ui:139
-msgid "Logging in"
-msgstr ""
-
-#: ../data/ui/registration.ui:40
-msgid "Welcome to Briar"
-msgstr "Willkommen bei Briar"
-
-#: ../data/ui/registration.ui:68
-msgid "Choose your nickname"
-msgstr "Wähle deinen Benutzernamen aus"
-
-#: ../data/ui/registration.ui:82
-msgid "The nickname may not be empty."
-msgstr "Der Benutzername darf nicht leer sein."
-
-#: ../data/ui/registration.ui:129
-msgid "Confirm Password"
-msgstr "Passwort bestätigen"
-
-#: ../data/ui/registration.ui:177
-msgid "The passwords do not match"
-msgstr "Die Passwörter stimmen nicht überein"
-
-#: ../data/ui/registration.ui:233
-msgid "Next"
-msgstr "Weiter"
-
-#: ../data/ui/registration.ui:253
-msgid "Passwords"
-msgstr "Passwörter"
-
-#: ../data/ui/registration.ui:275
-msgid "Create Account"
-msgstr "Account erstellen"
-
-#: ../data/ui/registration.ui:296
-msgid "Creating Account"
-msgstr "Erstelle Account"
-
-#: ../src/briar/gtk/containers/registration.py:137
-msgid "Couldn't register account"
-msgstr ""
-
-#~ msgctxt "login page: button"
-#~ msgid "Sign in"
-#~ msgstr "Login"
-
-#~ msgctxt "registration page: password input field"
-#~ msgid "Choose your password"
-#~ msgstr "Wähle Dein Passwort"
-
-#~ msgctxt "registration page: password input field"
-#~ msgid "Confirm your password"
-#~ msgstr "Bestätige Dein Passwort"
-
-#~ msgctxt "registration page: button"
-#~ msgid "Create Account"
-#~ msgstr "Account erstellen"
-
-#~ msgid "Nickname"
-#~ msgstr "Nutzername"
-
-#~ msgctxt "registration page: input field"
-#~ msgid "Choose your nickname"
-#~ msgstr "Wähle Deinen Benutzernamen"
-
-#~ msgctxt "registration page: button – from username to passwords"
-#~ msgid "Next"
-#~ msgstr "Weiter"
diff --git a/po/es.po b/po/es.po
deleted file mode 100644
index 2344a2a..0000000
--- a/po/es.po
+++ /dev/null
@@ -1,124 +0,0 @@
-msgid ""
-msgstr ""
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-09 01:55+0100\n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../data/ui/add_contact.ui:28
-msgid "Give this link to the contact you want to add"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:48
-msgid "Enter the link from your contact here"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:58
-msgctxt "link exchange: their link input field"
-msgid "Contact's link"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:69
-msgctxt "link exchange: button – initiate pairing"
-msgid "Continue"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:89
-msgid "Give your contact a nickname. Only you can see it."
-msgstr ""
-
-#: ../data/ui/add_contact.ui:99
-msgctxt "remote contact adding: alias input field"
-msgid "Enter a nickname"
-msgstr ""
-
-#: ../data/ui/add_contact.ui:110
-msgctxt "remote contact adding: button"
-msgid "Add Contact"
-msgstr ""
-
-#: ../data/ui/chat.ui:33
-msgctxt "chat page: input field"
-msgid "Type Message"
-msgstr ""
-
-#: ../data/ui/login.ui:29 ../data/ui/registration.ui:110
-msgid "Password"
-msgstr "Contraseña"
-
-#: ../data/ui/login.ui:63
-msgid "Couldn't log in"
-msgstr ""
-
-#: ../data/ui/login.ui:118
-msgid "Log in"
-msgstr ""
-
-#: ../data/ui/login.ui:139
-msgid "Logging in"
-msgstr ""
-
-#: ../data/ui/registration.ui:40
-msgid "Welcome to Briar"
-msgstr ""
-
-#: ../data/ui/registration.ui:68
-msgid "Choose your nickname"
-msgstr ""
-
-#: ../data/ui/registration.ui:82
-msgid "The nickname may not be empty."
-msgstr ""
-
-#: ../data/ui/registration.ui:129
-msgid "Confirm Password"
-msgstr ""
-
-#: ../data/ui/registration.ui:177
-msgid "The passwords do not match"
-msgstr ""
-
-#: ../data/ui/registration.ui:233
-msgid "Next"
-msgstr ""
-
-#: ../data/ui/registration.ui:253
-msgid "Passwords"
-msgstr ""
-
-#: ../data/ui/registration.ui:275
-msgid "Create Account"
-msgstr ""
-
-#: ../data/ui/registration.ui:296
-msgid "Creating Account"
-msgstr ""
-
-#: ../src/briar/gtk/containers/registration.py:137
-msgid "Couldn't register account"
-msgstr ""
-
-#~ msgctxt "registration page: password input field"
-#~ msgid "Choose your password"
-#~ msgstr "Elegir tu contraseña"
-
-#~ msgctxt "registration page: password input field"
-#~ msgid "Confirm your password"
-#~ msgstr "Confirmar tu contraseña"
-
-#~ msgctxt "registration page: button"
-#~ msgid "Create Account"
-#~ msgstr "Crear cuenta"
-
-#~ msgid "Nickname"
-#~ msgstr "Nombre"
-
-#~ msgctxt "registration page: input field"
-#~ msgid "Choose your nickname"
-#~ msgstr "Elegir tu nombre"
-
-#~ msgctxt "registration page: button – from username to passwords"
-#~ msgid "Next"
-#~ msgstr "Seguir"
diff --git a/po/meson.build b/po/meson.build
deleted file mode 100644
index 4f1ee28..0000000
--- a/po/meson.build
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-i18n.gettext('briar-gtk', preset: 'glib')
diff --git a/src/briar-gtk.in b/src/briar-gtk.in
deleted file mode 100755
index a0ab663..0000000
--- a/src/briar-gtk.in
+++ /dev/null
@@ -1,57 +0,0 @@
-#!@PYTHON@
-#
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-#
-# Initial version based on GNOME Lollypop
-# https://gitlab.gnome.org/World/lollypop/blob/1.0.2/lollypop.in
-
-import gettext
-import locale
-import os
-import signal
-import sys
-
-import gi
-gi.require_version('Gtk', '3.0')
-from gi.repository import Gio
-
-PACKAGE_DATA_DIR = '@PACKAGE_DATA_DIR@'
-LOCALE_DIR = '@LOCALE_DIR@'
-
-def add_package_to_sys_path():
-    sys.path.insert(1, PACKAGE_DATA_DIR)
-
-def handle_sigint_default_way():
-    signal.signal(signal.SIGINT, signal.SIG_DFL)
-
-def prepare_locale():
-    locale.bindtextdomain('briar-gtk', LOCALE_DIR)
-    locale.textdomain('briar-gtk')
-
-def prepare_gettext():
-    gettext.bindtextdomain('briar-gtk', LOCALE_DIR)
-    gettext.textdomain('briar-gtk')
-
-def prepare_localization():
-    prepare_locale()
-    prepare_gettext()
-
-def prepare_resource():
-    resource = Gio.Resource.load(os.path.join(PACKAGE_DATA_DIR, 'briar-gtk.gresource'))
-    resource._register()
-
-def prepare():
-    add_package_to_sys_path()
-    handle_sigint_default_way()
-    prepare_localization()
-    prepare_resource()
-
-def start_application():
-    from briar.gtk.application import Application
-    sys.exit(Application().run(sys.argv))
-
-if __name__ == '__main__':
-    prepare()
-    start_application()
diff --git a/src/briar/gtk/application.py b/src/briar/gtk/application.py
deleted file mode 100644
index 6aa73db..0000000
--- a/src/briar/gtk/application.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# Copyright (c) 2014-2018 Cedric Bellegarde <cedric.bellegarde@adishatz.org>
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-#
-# Initial version based on GNOME Lollypop
-# https://gitlab.gnome.org/World/lollypop/blob/1.0.2/lollypop/application.py
-
-from gi.repository import Gdk, Gio, GLib, Gtk
-
-from briar.api.api import Api
-
-from briar.gtk.define import APPLICATION_ID, APPLICATION_NAME
-from briar.gtk.define import APPLICATION_STYLING_PATH, BRIAR_HEADLESS_JAR
-from briar.gtk.window import Window
-
-
-class Application(Gtk.Application):
-
-    def __init__(self):
-        Application._set_application_name(APPLICATION_NAME)
-        super().__init__(application_id=APPLICATION_ID)
-
-    # pylint: disable=arguments-differ
-    def do_startup(self):
-        Gtk.Application.do_startup(self)
-        Application._setup_styling(APPLICATION_STYLING_PATH)
-        self._setup_api()
-
-    # pylint: disable=arguments-differ
-    def do_activate(self):
-        self._setup_window()
-
-    # pylint: disable=arguments-differ
-    def quit(self):
-        self.api.stop()
-        self._window.hide()
-        Gio.Application.quit(self)
-
-    @staticmethod
-    def _set_application_name(name):
-        GLib.set_application_name(name)
-        GLib.set_prgname(name)
-
-    @staticmethod
-    def _setup_styling(styling_path):
-        css_provider_file = Gio.File.new_for_uri(styling_path)
-        css_provider = Gtk.CssProvider()
-        css_provider.load_from_file(css_provider_file)
-
-        screen = Gdk.Screen.get_default()
-        style_context = Gtk.StyleContext()
-        style_context.add_provider_for_screen(screen, css_provider,
-                                              Gtk.STYLE_PROVIDER_PRIORITY_USER)
-
-    def _setup_api(self):
-        self.api = Api(BRIAR_HEADLESS_JAR)
-
-    # pylint: disable=access-member-before-definition
-    def _setup_window(self):
-        if not hasattr(self, "_window") or self._window is None:
-            self._window = Window()
-            self._window.show()
-        self._window.present()
diff --git a/src/briar/gtk/container.py b/src/briar/gtk/container.py
deleted file mode 100644
index af5b6fa..0000000
--- a/src/briar/gtk/container.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from gi.repository.Gtk import Builder, Overlay
-
-
-class Container(Overlay):
-
-    def __init__(self):
-        super().__init__()
-        self.builder = Builder()
diff --git a/src/briar/gtk/containers/add_contact.py b/src/briar/gtk/containers/add_contact.py
deleted file mode 100644
index f0a946a..0000000
--- a/src/briar/gtk/containers/add_contact.py
+++ /dev/null
@@ -1,139 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from gettext import gettext as _
-
-from gi.repository import GLib
-
-from briar.api.models.contacts import Contacts
-from briar.gtk.container import Container
-from briar.gtk.define import APP
-
-
-class AddContactContainer(Container):
-
-    ADD_CONTACT_UI = "/app/briar/gtk/ui/add_contact.ui"
-    STACK_NAME = "add_contact_flow_stack"
-    HEADERS_NAME = "add_contact_flow_headers"
-
-    def __init__(self, window):
-        super().__init__()
-        self._window = window
-        self._setup_view()
-        self._load_content()
-
-    def _setup_view(self):
-        self.builder.add_from_resource(self.ADD_CONTACT_UI)
-        self.builder.connect_signals(self)
-
-        self._setup_add_contact_flow_stack()
-        self._setup_add_contact_flow_headers()
-        self._setup_link_keystroke_listener()
-
-    def _load_content(self):
-        contacts = Contacts(APP().api)
-        own_link = contacts.get_link()
-        self.builder.get_object("own_link_entry").set_text(own_link)
-
-    def _setup_add_contact_flow_stack(self):
-        self.add_contact_flow_stack = self.builder.get_object(self.STACK_NAME)
-        self.add_contact_flow_stack.show_all()
-        self.add(self.add_contact_flow_stack)
-
-    def _setup_add_contact_flow_headers(self):
-        add_contact_flow_headers = self.builder.get_object(self.HEADERS_NAME)
-        add_contact_flow_headers.show_all()
-        self._window.set_titlebar(add_contact_flow_headers)
-
-    def _setup_link_keystroke_listener(self):
-        their_link_entry = self.builder.get_object("their_link_entry")
-        their_link_entry.connect("key-press-event",
-                                 self._link_keystroke)
-
-    # pylint: disable=unused-argument
-    def _link_keystroke(self, widget, event):
-        if event.hardware_keycode != 36 and event.hardware_keycode != 104:
-            return
-        self.on_links_next_pressed(None)
-
-    # pylint: disable=unused-argument
-    def on_link_back_pressed(self, button):
-        self._back_to_main_window()
-
-    # pylint: disable=unused-argument
-    def on_links_next_pressed(self, button):
-        link_error_label = self.builder.get_object("link_error_label")
-        if self._link_is_empty():
-            link_error_label.set_label(_("Please enter a link"))
-            link_error_label.show()
-            return
-        if self._their_link_is_ours():
-            link_error_label.show()
-            link_error_label.set_label(
-                _("Enter your contact's link, not your own"))
-            return
-        link_error_label.hide()
-        self._show_alias_page()
-
-    def _their_link_is_ours(self):
-        their_link = self.builder.get_object("their_link_entry").get_text()
-        own_link = self.builder.get_object("own_link_entry").get_text()
-        return their_link == own_link
-
-    def _link_is_empty(self):
-        their_link = self.builder.get_object("their_link_entry").get_text()
-        return len(their_link) == 0
-
-    def _show_alias_page(self):
-        alias_page = self.builder.get_object("alias_page")
-        self.add_contact_flow_stack.set_visible_child(alias_page)
-
-        self._focus_alias_entry()
-        self._setup_alias_keystroke_listener()
-
-    def _focus_alias_entry(self):
-        alias_entry = self.builder.get_object("alias_entry")
-        alias_entry.grab_focus()
-
-    def _setup_alias_keystroke_listener(self):
-        alias_entry = self.builder.get_object("alias_entry")
-        alias_entry.connect("key-press-event", self._alias_keystroke)
-
-    # pylint: disable=unused-argument
-    def _alias_keystroke(self, widget, event):
-        if event.hardware_keycode != 36 and event.hardware_keycode != 104:
-            return
-        self.on_add_contact_pressed(None)
-
-    # pylint: disable=unused-argument
-    def on_alias_back_pressed(self, button):
-        self._show_links_page()
-
-    def _show_links_page(self):
-        links_page = self.builder.get_object("links_page")
-        self.add_contact_flow_stack.set_visible_child(links_page)
-
-    # pylint: disable=unused-argument
-    def on_add_contact_pressed(self, button):
-        alias_error_label = self.builder.get_object(
-            "alias_error_label")
-        if self._alias_is_empty():
-            alias_error_label.show()
-            return
-        alias_error_label.hide()
-        self._add_contact()
-        self._back_to_main_window()
-
-    def _alias_is_empty(self):
-        alias = self.builder.get_object("alias_entry").get_text()
-        return len(alias) == 0
-
-    def _add_contact(self):
-        contacts = Contacts(APP().api)
-        their_link = self.builder.get_object("their_link_entry").get_text()
-        alias = self.builder.get_object("alias_entry").get_text()
-        contacts.add_pending(their_link, alias)
-
-    def _back_to_main_window(self):
-        GLib.idle_add(self._window.back_to_main, None)
diff --git a/src/briar/gtk/containers/chat.py b/src/briar/gtk/containers/chat.py
deleted file mode 100644
index b2e00b0..0000000
--- a/src/briar/gtk/containers/chat.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from gi.repository import GLib, Gtk
-
-from briar.api.models.private_chat import PrivateChat
-from briar.gtk.container import Container
-from briar.gtk.define import APP
-
-
-class ChatContainer(Container):
-
-    CONTAINER_UI = "/app/briar/gtk/ui/chat.ui"
-
-    def __init__(self, contact_id):
-        super().__init__()
-        self._api = APP().api
-        self._contact_id = contact_id
-        self._setup_view()
-        self._load_content()
-
-    def _setup_view(self):
-        self.builder.add_from_resource(self.CONTAINER_UI)
-        self.add(self.builder.get_object("chat"))
-        self.builder.connect_signals(self)
-        chat_entry = self.builder.get_object("chat_entry")
-        chat_entry.connect("key-press-event", self._key_pressed)
-
-    def _load_content(self):
-        private_chat = PrivateChat(self._api, self._contact_id)
-        messages_list = private_chat.get()
-        self._messages_list_box = self.builder.get_object("messages_list")
-        for message in messages_list:
-            self._add_message(message["text"], message["local"])
-        private_chat.watch_messages(self._add_message_async)
-
-    def _add_message(self, message, local):
-        message_label = Gtk.Label(message)
-        message_label.set_halign(Gtk.Align.START)
-        if local:
-            message_label.set_halign(Gtk.Align.END)
-        message_label.show()
-        self._messages_list_box.add(message_label)
-
-    def _add_message_async(self, message):
-        GLib.idle_add(self._add_message, message["text"], False)
-
-    # pylint: disable=unused-argument
-    def _key_pressed(self, widget, event):
-        if event.hardware_keycode != 36 and event.hardware_keycode != 104:
-            return
-        chat_entry = self.builder.get_object("chat_entry")
-        message = chat_entry.get_text()
-        private_chat = PrivateChat(self._api, self._contact_id)
-        private_chat.send(message)
-
-        self._add_message(message, True)
-        chat_entry.set_text("")
diff --git a/src/briar/gtk/containers/login.py b/src/briar/gtk/containers/login.py
deleted file mode 100644
index 51b900a..0000000
--- a/src/briar/gtk/containers/login.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from gi.repository import GLib
-
-from briar.gtk.container import Container
-from briar.gtk.define import APP
-
-
-class LoginContainer(Container):
-
-    LOGIN_UI = "/app/briar/gtk/ui/login.ui"
-    STACK_NAME = "login_flow_stack"
-    HEADERS_NAME = "login_flow_headers"
-
-    def __init__(self, window):
-        super().__init__()
-        self._window = window
-        self._setup_view()
-
-    def _setup_view(self, ):
-        self.builder.add_from_resource(self.LOGIN_UI)
-        self.builder.connect_signals(self)
-
-        self._setup_login_flow_stack()
-        self._setup_login_flow_headers()
-        self._setup_keystroke_listener()
-
-    def _setup_login_flow_stack(self):
-        self.login_flow_stack = self.builder.get_object(self.STACK_NAME)
-        self.login_flow_stack.show_all()
-        self.add(self.login_flow_stack)
-
-    def _setup_login_flow_headers(self):
-        login_flow_headers = self.builder.get_object(self.HEADERS_NAME)
-        login_flow_headers.show_all()
-        self._window.set_titlebar(login_flow_headers)
-
-    def _setup_keystroke_listener(self):
-        password_entry = self.builder.get_object("password_entry")
-        password_entry.connect("key-press-event",
-                               self._password_keystroke)
-
-    # pylint: disable=unused-argument
-    def _password_keystroke(self, widget, event):
-        if event.hardware_keycode != 36 and event.hardware_keycode != 104:
-            return
-        self.on_login_pressed(None)
-
-    # pylint: disable=unused-argument
-    def on_login_pressed(self, button):
-        self._show_loading_animation()
-        self._login()
-
-    def _show_loading_animation(self):
-        loading_animation = self.builder.get_object("loading_animation")
-        self.login_flow_stack.set_visible_child(loading_animation)
-
-    def _login(self):
-        password = self.builder.get_object("password_entry").get_text()
-        APP().api.login(password, self._login_completed)
-
-    def _login_completed(self, succeeded):
-        function = self._login_failed
-        if succeeded:
-            function = self._window.on_startup_completed
-        GLib.idle_add(function)
-
-    def _login_failed(self):
-        self._show_error_message()
-        self._focus_password_entry()
-        self._show_login_page()
-
-    def _show_error_message(self):
-        error_message = self.builder.get_object("error_message")
-        error_message.show()
-
-    def _focus_password_entry(self):
-        password_entry = self.builder.get_object("password_entry")
-        password_entry.grab_focus()
-
-    def _show_login_page(self):
-        login_page = self.builder.get_object("login_page")
-        self.login_flow_stack.set_visible_child(login_page)
diff --git a/src/briar/gtk/containers/main.py b/src/briar/gtk/containers/main.py
deleted file mode 100644
index e6b03e0..0000000
--- a/src/briar/gtk/containers/main.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from gi.repository import GLib, Gtk
-
-from briar.api.models.contacts import Contacts
-from briar.gtk.container import Container
-from briar.gtk.define import APP
-
-
-class MainContainer(Container):
-
-    CONTAINER_UI = "/app/briar/gtk/ui/main.ui"
-
-    def __init__(self):
-        super().__init__()
-        self._api = APP().api
-        self._setup_view()
-        self._load_content()
-
-    def _setup_view(self):
-        self.builder.add_from_resource(self.CONTAINER_UI)
-        self.add(self.builder.get_object("contacts_list"))
-        self.builder.connect_signals(self)
-
-    def _load_content(self):
-        self._contacts = Contacts(self._api)
-        self._load_contacts()
-        self._contacts.watch_contacts(self._refresh_contacts_async)
-
-    def _load_contacts(self):
-        contacts_list = self._contacts.get()
-        contacts_list_box = self.builder.get_object("contacts_list")
-        for contact in contacts_list:
-            name = contact["author"]["name"]
-            if "alias" in contact:
-                name = contact["alias"]
-            contact_button = Gtk.Button(name)
-            contact_button.connect("clicked", MainContainer._contact_clicked,
-                                   contact["contactId"])
-            contact_button.show()
-            contacts_list_box.add(contact_button)
-
-    def _refresh_contacts_async(self):
-        GLib.idle_add(self._refresh_contacts)
-
-    def _refresh_contacts(self):
-        self._clear_contact_list()
-        self._load_contacts()
-
-    def _clear_contact_list(self):
-        contacts_list_box = self.builder.get_object("contacts_list")
-        contacts_list_box_children = contacts_list_box.get_children()
-        for child in contacts_list_box_children:
-            contacts_list_box.remove(child)
-
-    # pylint: disable=unused-argument
-    @staticmethod
-    def _contact_clicked(widget, contact_id):
-        GLib.idle_add(APP().get_property("active_window").
-                      open_private_chat, contact_id)
diff --git a/src/briar/gtk/containers/registration.py b/src/briar/gtk/containers/registration.py
deleted file mode 100644
index 68a50f6..0000000
--- a/src/briar/gtk/containers/registration.py
+++ /dev/null
@@ -1,138 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from gettext import gettext as _
-
-from gi.repository import GLib
-
-from briar.gtk.container import Container
-from briar.gtk.define import APP
-
-
-class RegistrationContainer(Container):
-
-    REGISTRATION_UI = "/app/briar/gtk/ui/registration.ui"
-    STACK_NAME = "registration_flow_stack"
-    HEADERS_NAME = "registration_flow_headers"
-
-    def __init__(self, window):
-        super().__init__()
-        self._window = window
-        self._setup_view()
-
-    def _setup_view(self, ):
-        self.builder.add_from_resource(self.REGISTRATION_UI)
-        self.builder.connect_signals(self)
-
-        self._setup_registration_flow_stack()
-        self._setup_registration_flow_headers()
-        self._setup_nickname_keystroke_listener()
-
-    def _setup_registration_flow_stack(self):
-        self.registration_flow_stack = self.builder.get_object(self.STACK_NAME)
-        self.registration_flow_stack.show_all()
-        self.add(self.registration_flow_stack)
-
-    def _setup_registration_flow_headers(self):
-        registration_flow_headers = self.builder.get_object(self.HEADERS_NAME)
-        registration_flow_headers.show_all()
-        self._window.set_titlebar(registration_flow_headers)
-
-    def _setup_nickname_keystroke_listener(self):
-        nickname_entry = self.builder.get_object("nickname_entry")
-        nickname_entry.connect("key-press-event",
-                               self._nickname_keystroke)
-
-    # pylint: disable=unused-argument
-    def _nickname_keystroke(self, widget, event):
-        if event.hardware_keycode != 36 and event.hardware_keycode != 104:
-            return
-        self.on_nickname_next_pressed(None)
-
-    # pylint: disable=unused-argument
-    def on_nickname_next_pressed(self, button):
-        nickname_error_label = self.builder.get_object("nickname_error_label")
-        if self._nickname_is_empty():
-            nickname_error_label.show()
-            return
-        nickname_error_label.hide()
-        self._show_passwords_page()
-
-    def _nickname_is_empty(self):
-        nickname = self.builder.get_object("nickname_entry").get_text()
-        return len(nickname) == 0
-
-    def _show_passwords_page(self):
-        passwords_page = self.builder.get_object("passwords_page")
-        self.registration_flow_stack.set_visible_child(passwords_page)
-
-        self._focus_password_entry()
-        self._setup_passwords_keystroke_listener()
-
-    def _focus_password_entry(self):
-        password_entry = self.builder.get_object("password_entry")
-        password_entry.grab_focus()
-
-    def _setup_passwords_keystroke_listener(self):
-        password_confirm_entry = self.builder.get_object(
-            "password_confirm_entry")
-        password_confirm_entry.connect(
-            "key-press-event", self._passwords_keystroke)
-
-    # pylint: disable=unused-argument
-    def _passwords_keystroke(self, widget, event):
-        if event.hardware_keycode != 36 and event.hardware_keycode != 104:
-            return
-        self.on_create_account_pressed(None)
-
-    # pylint: disable=unused-argument
-    def on_create_account_back_pressed(self, button):
-        self._show_nickname_page()
-
-    def _show_nickname_page(self):
-        nickname_page = self.builder.get_object("nickname_page")
-        self.registration_flow_stack.set_visible_child(nickname_page)
-
-    # pylint: disable=unused-argument
-    def on_create_account_pressed(self, button):
-        passwords_error_label = self.builder.get_object(
-            "passwords_error_label")
-        if not self._passwords_match():
-            passwords_error_label.show()
-            return
-        passwords_error_label.hide()
-        self._show_loading_animation()
-        self._register()
-
-    def _passwords_match(self):
-        password = self.builder.get_object("password_entry").get_text()
-        password_confirm = self.builder.get_object(
-            "password_confirm_entry").get_text()
-        return password == password_confirm
-
-    def _show_loading_animation(self):
-        loading_animation = self.builder.get_object("loading_animation")
-        self.registration_flow_stack.set_visible_child(loading_animation)
-
-    def _register(self):
-        nickname = self.builder.get_object("nickname_entry").get_text()
-        password = self.builder.get_object("password_entry").get_text()
-        APP().api.register((nickname, password),
-                           self._registration_completed)
-
-    def _registration_completed(self, succeeded):
-        function = self._registration_failed
-        if succeeded:
-            function = self._window.on_startup_completed
-        GLib.idle_add(function)
-
-    def _registration_failed(self):
-        self._show_error_message()
-        self._show_passwords_page()
-
-    def _show_error_message(self):
-        passwords_error_label = self.builder.get_object(
-            "passwords_error_label")
-        passwords_error_label.set_label(_("Couldn't register account"))
-        passwords_error_label.show()
diff --git a/src/briar/gtk/containers/startup.py b/src/briar/gtk/containers/startup.py
deleted file mode 100644
index c6a1817..0000000
--- a/src/briar/gtk/containers/startup.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from briar.gtk.container import Container
-from briar.gtk.containers.login import LoginContainer
-from briar.gtk.containers.registration import RegistrationContainer
-from briar.gtk.define import APP
-
-
-class StartupContainer(Container):
-
-    def __init__(self, window):
-        super().__init__()
-        self._setup_view(window)
-
-    def _setup_view(self, window):
-        container = RegistrationContainer(window)
-        if APP().api.has_account():
-            container = LoginContainer(window)
-
-        container.show()
-        self.add(container)
diff --git a/src/briar/gtk/define.py b/src/briar/gtk/define.py
deleted file mode 100644
index 4e893da..0000000
--- a/src/briar/gtk/define.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# Copyright (c) 2014-2018 Cedric Bellegarde <cedric.bellegarde@adishatz.org>
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-#
-# Initial version based on GNOME Lollypop
-# https://gitlab.gnome.org/World/lollypop/blob/1.0.2/lollypop/define.py
-
-from gi.repository import Gio
-
-APPLICATION_ID = "app.briar.gtk"
-APPLICATION_NAME = "Briar"
-APPLICATION_STYLING_PATH = "resource:///app/briar/gtk/ui/application.css"
-BRIAR_HEADLESS_JAR = "/app/briar/briar-headless.jar"
-
-APP = Gio.Application.get_default
diff --git a/src/briar/gtk/toolbar.py b/src/briar/gtk/toolbar.py
deleted file mode 100644
index 64784d8..0000000
--- a/src/briar/gtk/toolbar.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# Copyright (c) 2014-2019 Cedric Bellegarde <cedric.bellegarde@adishatz.org>
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-#
-# Initial version based on GNOME Lollypop
-# https://gitlab.gnome.org/World/lollypop/blob/1.0.12/lollypop/toolbar.py
-
-from gi.repository import Gtk
-
-from briar.gtk.define import APPLICATION_NAME
-
-
-class Toolbar(Gtk.HeaderBar):
-
-    TOOLBAR_UI = "/app/briar/gtk/ui/toolbar_start.ui"
-
-    def __init__(self):
-        super().__init__()
-        self._setup_builder()
-        self._setup_toolbar()
-
-    def show_add_contact_button(self, show, callback=None):
-        add_contact_button = self._builder.get_object("add_contact_button")
-        if not show:
-            add_contact_button.hide()
-            return
-        if callback is None:
-            raise Exception("Callback needed when showing add contact button")
-        add_contact_button.show()
-        add_contact_button.connect("clicked", callback)
-
-    def show_back_button(self, show, callback=None):
-        back_button = self._builder.get_object("back_button")
-        if not show:
-            back_button.hide()
-            return
-        if callback is None:
-            raise Exception("Callback needed when showing back button")
-        back_button.show()
-        back_button.connect("clicked", callback)
-
-    def _setup_builder(self):
-        self._builder = Gtk.Builder()
-
-    def _setup_toolbar(self):
-        self.set_title(APPLICATION_NAME)
-
-        self._builder.add_from_resource(self.TOOLBAR_UI)
-        toolbar_start = self._builder.get_object("toolbar_start")
-        self.pack_start(toolbar_start)
diff --git a/src/briar/gtk/window.py b/src/briar/gtk/window.py
deleted file mode 100644
index 665d006..0000000
--- a/src/briar/gtk/window.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from gi.repository.Gtk import ApplicationWindow, Grid
-
-from briar.gtk.containers.add_contact import AddContactContainer
-from briar.gtk.containers.chat import ChatContainer
-from briar.gtk.containers.main import MainContainer
-from briar.gtk.containers.startup import StartupContainer
-from briar.gtk.define import APP, APPLICATION_ID, APPLICATION_NAME
-from briar.gtk.toolbar import Toolbar
-
-
-class Window(ApplicationWindow):
-
-    DEFAULT_WINDOW_SIZE = (600, 400)
-
-    def __init__(self):
-        self._initialize_gtk_application_window()
-        self._setup_content()
-
-    @property
-    def container(self):
-        return self._container
-
-    @property
-    def toolbar(self):
-        return self._toolbar
-
-    def _initialize_gtk_application_window(self):
-        ApplicationWindow.__init__(self, application=APP(),
-                                   title=APPLICATION_NAME,
-                                   icon_name=APPLICATION_ID)
-
-    def _setup_content(self):
-        self._setup_size(self.DEFAULT_WINDOW_SIZE)
-        self._setup_startup_container()
-
-    def _setup_size(self, size):
-        if Window._size_is_valid(size):
-            self.resize(size[0], size[1])
-
-    @staticmethod
-    def _size_is_valid(size):
-        return len(size) == 2 and\
-               isinstance(size[0], int) and\
-               isinstance(size[1], int)
-
-    def _setup_startup_container(self):
-        self._container = StartupContainer(self)
-        self._container.show()
-        self.add(self._container)
-
-    def on_startup_completed(self):
-        self._container.destroy()
-        self._setup_grid()
-        self._setup_toolbar()
-        self._setup_main_container()
-
-    def _setup_grid(self):
-        self._grid = Grid()
-        self._grid.show()
-        self.add(self._grid)
-
-    def _reset_window(self):
-        self._container.destroy()
-        self._grid.destroy()
-        self._setup_grid()
-        self._setup_toolbar()
-
-    def _setup_toolbar(self):
-        self._toolbar = Toolbar()
-        self._toolbar.show()
-        self._toolbar.set_show_close_button(True)
-        self.set_titlebar(self._toolbar)
-
-    def _setup_main_container(self):
-        self._container = MainContainer()
-        self._container.show()
-        self._grid.add(self._container)
-        self._toolbar.show_add_contact_button(True, self.show_add_contact)
-
-    # pylint: disable=unused-argument
-    def show_add_contact(self, widget):
-        self._setup_add_contact()
-
-    def _setup_add_contact(self):
-        self._grid.destroy()
-        self._container = AddContactContainer(self)
-        self._container.show()
-        self.add(self._container)
-
-    def open_private_chat(self, contact_id):
-        self._reset_window()
-        self._setup_private_chat(contact_id)
-
-    def _setup_private_chat(self, contact_id):
-        self._container = ChatContainer(contact_id)
-        self._container.show()
-        self._grid.add(self._container)
-        self._toolbar.show_back_button(True, self.back_to_main)
-        self._toolbar.show_add_contact_button(False)
-
-    # pylint: disable=unused-argument
-    def back_to_main(self, widget):
-        self._reset_window()
-        self._toolbar.show_back_button(False)
-        self._setup_main_container()
diff --git a/src/meson_post_install.py b/src/meson_post_install.py
deleted file mode 100755
index 1eae062..0000000
--- a/src/meson_post_install.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from os import environ, path
-from subprocess import call
-
-PREFIX = environ.get('MESON_INSTALL_PREFIX', '/usr/local')
-DATA_DIR = path.join(PREFIX, 'share')
-DESTINATION_DIR = environ.get('DESTDIR', '')
-
-# Package managers set this so we don't need to run
-if not DESTINATION_DIR:
-    print('Updating icon cache...')
-    call(['gtk-update-icon-cache', '-qtf',
-          path.join(DATA_DIR, 'icons', 'hicolor')])
-
-    print('Updating desktop database...')
-    call(['update-desktop-database', '-q',
-          path.join(DATA_DIR, 'applications')])
-
-    print('Compiling GSettings schemas...')
-    call(['glib-compile-schemas', path.join(DATA_DIR, 'glib-2.0', 'schemas')])
diff --git a/tests/briar/gtk/test_application.py b/tests/briar/gtk/test_application.py
deleted file mode 100644
index f3c375f..0000000
--- a/tests/briar/gtk/test_application.py
+++ /dev/null
@@ -1,139 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-from unittest.mock import Mock
-
-from briar.api.api import Api
-from briar.gtk.application import Application
-from briar.gtk.define import APPLICATION_NAME, APPLICATION_STYLING_PATH
-from briar.gtk.define import BRIAR_HEADLESS_JAR
-from briar.gtk.window import Window
-
-
-def test_do_startup(mocker):
-    do_startup_mock = mocker.patch("gi.repository.Gtk.Application.do_startup")
-    _setup_styling_mock = mocker.patch(
-        "briar.gtk.application.Application._setup_styling")
-    _setup_api_mock = mocker.patch(
-        "briar.gtk.application.Application._setup_api")
-
-    Application().do_startup()
-
-    do_startup_mock.assert_called_once()
-    _setup_styling_mock.assert_called_once_with(APPLICATION_STYLING_PATH)
-    _setup_api_mock.assert_called_once()
-
-
-def test_do_activate(mocker):
-    _setup_window_mock = mocker.patch(
-        "briar.gtk.application.Application._setup_window")
-
-    Application().do_activate()
-
-    _setup_window_mock.assert_called_once()
-
-
-def test_quit(mocker):
-    api_mock = mocker.patch("briar.api.api.Api")
-    api_stop_mock = mocker.patch("briar.api.api.Api.stop")
-    window_mock = mocker.patch("briar.gtk.window.Window")
-    window_hide_mock = mocker.patch("briar.gtk.window.Window.hide")
-    quit_mock = mocker.patch("gi.repository.Gio.Application.quit")
-
-    application = Application()
-    application.api = api_mock
-    application._window = window_mock
-
-    application.quit()
-
-    api_stop_mock.assert_called_once()
-    window_hide_mock.assert_called_once()
-    quit_mock.assert_called_once()
-
-
-def test_set_application_name(mocker):
-    set_application_name_mock = mocker.patch(
-        "gi.repository.GLib.set_application_name")
-    set_prgname_mock = mocker.patch("gi.repository.GLib.set_prgname")
-    name_mock = "Mock"
-
-    Application._set_application_name(name_mock)
-
-    set_application_name_mock.assert_called_once_with(name_mock)
-    set_prgname_mock.assert_called_once_with(name_mock)
-
-
-def test_set_application_name_implicit(mocker):
-    set_application_name_mock = mocker.patch(
-        "gi.repository.GLib.set_application_name")
-    set_prgname_mock = mocker.patch("gi.repository.GLib.set_prgname")
-
-    Application()
-
-    set_application_name_mock.assert_called_once_with(APPLICATION_NAME)
-    set_prgname_mock.assert_called_once_with(APPLICATION_NAME)
-
-
-def test_setup_styling(mocker):
-    new_for_uri_mock = mocker.patch("gi.repository.Gio.File.new_for_uri")
-    load_from_file_mock = mocker.patch(
-        "gi.repository.Gtk.CssProvider.load_from_file")
-    get_default_mock = mocker.patch("gi.repository.Gdk.Screen.get_default")
-    add_provider_for_screen_mock = mocker.patch(
-        "gi.repository.Gtk.StyleContext.add_provider_for_screen")
-
-    Application._setup_styling(APPLICATION_STYLING_PATH)
-
-    new_for_uri_mock.assert_called_with(APPLICATION_STYLING_PATH)
-    load_from_file_mock.assert_called_once()
-    get_default_mock.assert_called_once()
-    add_provider_for_screen_mock.assert_called_once()
-
-
-def test_setup_api(mocker):
-    application = Application()
-
-    assert not hasattr(application, "api")
-
-    application._setup_api()
-
-    assert isinstance(application.api, Api)
-    assert application.api._command == ["java", "-jar", BRIAR_HEADLESS_JAR]
-
-
-def test_setup_window(mocker):
-    mocker.patch("briar.gtk.window.Window.__init__").return_value = None
-    window_show_mock = mocker.patch("briar.gtk.window.Window.show")
-    window_present_mock = mocker.patch("briar.gtk.window.Window.present")
-
-    Application()._setup_window()
-
-    window_show_mock.assert_called_once()
-    window_present_mock.assert_called_once()
-
-
-def test_setup_window_has_attribute(mocker):
-    mocker.patch("briar.gtk.window.Window.__init__").return_value = None
-    window_mock = Mock()
-
-    application = Application()
-    application._window = window_mock
-
-    application._setup_window()
-
-    window_mock.show.assert_not_called()
-    window_mock.present.assert_called_once()
-
-
-def test_setup_window_has_none_attribute(mocker):
-    mocker.patch("briar.gtk.window.Window.__init__").return_value = None
-    window_show_mock = mocker.patch("briar.gtk.window.Window.show")
-    window_present_mock = mocker.patch("briar.gtk.window.Window.present")
-
-    application = Application()
-
-    application._setup_window()
-
-    window_show_mock.assert_called_once()
-    window_present_mock.assert_called_once()
diff --git a/tests/briar/gtk/test_toolbar.py b/tests/briar/gtk/test_toolbar.py
deleted file mode 100644
index 065101a..0000000
--- a/tests/briar/gtk/test_toolbar.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-import pytest
-from unittest.mock import Mock
-
-from briar.gtk.toolbar import Toolbar
-
-
-def test_show_back_button(mocker):
-    get_object_mock = mocker.patch("gi.repository.Gtk.Builder.get_object")
-    back_button_mock = get_object_mock.return_value
-    callback = Mock()
-    mocker.patch("briar.gtk.toolbar.Toolbar._setup_toolbar")
-
-    Toolbar().show_back_button(True, callback)
-
-    get_object_mock.assert_called_once_with("back_button")
-    back_button_mock.hide.assert_not_called()
-    back_button_mock.show.assert_called_once()
-    back_button_mock.connect.assert_called_once()
-
-
-def test_show_back_button_without_callback(mocker):
-    get_object_mock = mocker.patch("gi.repository.Gtk.Builder.get_object")
-    back_button_mock = get_object_mock.return_value
-    mocker.patch("briar.gtk.toolbar.Toolbar._setup_toolbar")
-
-    with pytest.raises(Exception,
-                       match="Callback needed when showing back button"):
-        Toolbar().show_back_button(True)
-
-    get_object_mock.assert_called_once_with("back_button")
-    back_button_mock.hide.assert_not_called()
-    back_button_mock.show.assert_not_called()
-    back_button_mock.connect.assert_not_called()
-
-
-def test_hide_back_button(mocker):
-    get_object_mock = mocker.patch("gi.repository.Gtk.Builder.get_object")
-    back_button_mock = get_object_mock.return_value
-    mocker.patch("briar.gtk.toolbar.Toolbar._setup_toolbar")
-
-    Toolbar().show_back_button(False)
-
-    get_object_mock.assert_called_once_with("back_button")
-    back_button_mock.hide.assert_called_once()
-    back_button_mock.show.assert_not_called()
-    back_button_mock.connect.assert_not_called()
diff --git a/tools/generate_data.sh b/tools/generate_data.sh
deleted file mode 100755
index af6de4e..0000000
--- a/tools/generate_data.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-#
-# Initial version from GNOME Lollypop
-# https://gitlab.gnome.org/World/lollypop/blob/1.0.2/generate_data.sh
-
-function generate_resource()
-{
-    echo '<?xml version="1.0" encoding="UTF-8"?>'
-    echo '<gresources>'
-    echo '  <gresource prefix="/app/briar/gtk">'
-    for file in data/ui/*.css
-    do
-        echo -n '    <file compressed="true">'
-        echo -n 'ui/'
-        echo -n $(basename $file)
-        echo '</file>'
-    done
-    for file in data/ui/*.ui
-    do
-        echo -n '    <file compressed="true" preprocess="xml-stripblanks">'
-        echo -n 'ui/'
-        echo -n $(basename $file)
-        echo '</file>'
-    done
-    echo '  </gresource>'
-    echo '</gresources>'
-}
-
-function generate_po()
-{
-    cd po
-    # git pull https://www.transifex.com/otf/briar/
-    >briar-gtk.pot
-    for file in ../data/app.briar.gtk.gschema.xml ../data/ui/*.ui $(find "../src/briar" -name '*.py');
-    do
-        xgettext --from-code=UTF-8 -j $file -o briar-gtk.pot
-    done
-    >LINGUAS
-    for po in *.po
-    do
-        msgmerge -N $po briar-gtk.pot > /tmp/$$language_new.po
-        mv /tmp/$$language_new.po $po
-        language=${po%.po}
-        echo $language >>LINGUAS
-    done
-}
-
-generate_resource > data/ui/app.briar.gtk.gresource.xml
-generate_po
-- 
GitLab