2
42
Fork
You've already forked Retiled
1
An attempt at creating a "desktop" environment mainly for Linux phones and tablets that's similar in function to some parts of Microsoft's Windows Phone 8.x, primarily the Start screen, Search app, navigation bar, Action Center, and the status bar. Testing is mainly being done using the PinePhone, so that'll be the main supported device. This repo was migrated from GitHub and is the canonical repo as of September 12, 2023. New stuff will be here.
  • QML 68.9%
  • C++ 25.6%
  • Shell 2.1%
  • CMake 1.5%
  • Python 1.1%
  • Other 0.8%
2026年05月09日 22:53:06 +02:00
Comprexxd I think I'm done with the relicensing now. 2026年04月06日 07:15:02 -04:00
docs Add links to deal with foot resizing. 2026年04月14日 02:59:01 +02:00
fonts/wp-metro Actually, let's not distribute Inter. 2023年04月13日 09:52:27 -04:00
GitRepoManager Give disabled textboxes a visual indicator. 2026年04月07日 08:29:41 -04:00
icons/actions Update icons/actions/README.md 2026年04月13日 12:03:21 +02:00
libs Change some addresses to point to Codeberg. 2025年03月20日 08:03:02 -04:00
LICENSES I think I'm done with the relicensing now. 2026年04月06日 07:15:02 -04:00
RetiledCompositor/RetiledCompositor Rename themeLoader so it's lowercase like that. 2024年07月18日 12:33:01 -04:00
RetiledControlsDemo Forgot to change this and noticed while reviewing the PR. 2026年04月06日 07:26:42 -04:00
RetiledNavbar Explain why the thing is commented out. 2026年04月07日 04:42:42 -04:00
RetiledSearch I think I'm done with the relicensing now. 2026年04月06日 07:15:02 -04:00
RetiledSettings Forgot to change this and noticed while reviewing the PR. 2026年04月06日 07:26:42 -04:00
RetiledStart Add a spacer to the bottom of the All Apps list. 2026年04月13日 09:32:20 -04:00
RetiledStatusbar Add more to my idea for allowing no exclusive zone on... 2026年04月13日 09:31:41 +02:00
RetiledStyles Add some todos for the context menu placement. 2026年04月15日 19:02:46 -04:00
RetiledThemes Changed the limit to be 10 levels of imports maximum because that gives more room to do things that aren't taken up by my own themes. 2025年08月29日 13:25:16 -04:00
Scripts Use nproc to build faster. 2026年04月12日 05:41:54 -04:00
TestProjects Delete two old C++ test projects. 2025年01月21日 04:34:44 -05:00
.gitignore Bring over the navbar I was working on in... 2024年08月02日 17:36:20 -04:00
CMakeLists.txt Merge branch 'main' into comprexxed 2025年08月30日 17:40:41 +02:00
CODE_OF_CONDUCT.md Add plurality to list of protected categories + do... 2022年07月11日 16:05:56 -04:00
CONTRIBUTING.md Explicitly ban Windows et. al proprietary code like Wine. 2026年05月09日 22:53:06 +02:00
PRIVACY_POLICY.md Update PRIVACY_POLICY.md 2026年03月19日 01:46:40 +01:00
README.md I think I'm done with the relicensing now. 2026年04月06日 07:15:02 -04:00
RetiledConfig.cmake.in Bring over the navbar I was working on in... 2024年08月02日 17:36:20 -04:00

Retiled

An attempt at creating a "desktop" environment mainly for Linux phones and tablets that's similar in function to some parts of Microsoft's Windows Phone 8.x, primarily these features and behaviors:

Retiled is not to be confused with (one of?) the Windows Phone/Windows 8.x application and Live Tile restoration project, also called Retiled which I'm not associated with. That project seems to have started recently as of August 2025, because I never heard about it before.

Note: As of September 12, 2023, this is the canonical repo for Retiled and I'll add a note to the GitHub repo with a link here.

Development is mainly being done using the PinePhone for testing, so that'll be the main supported device (with support for other devices planned, but not as the main focus because I want to ensure it runs reasonably well on the PinePhone, thereby ensuring it should run way better on devices with better specs; proper support for other devices like hardware stuff and notch support will be added, though). It's still in early development as I don't really know what I'm doing with C++ and Qt/QML which means development goes a little slowly, but I'm learning.

Guess you could say it's "Something to fill the Live Tile-shaped hole in your heart", but it's not anywhere near ready yet. Here's a tagline (?) I figured out, in addition to what's in the last sentence: "Together, we resolved to forge a new way of life here on *nix, come what may. This was our beautiful lie to ourselves... (orchestral music goes dooo da dooo in the background)" Or alternatively, "Our beautiful lie to ourselves..."

So far, it's been tested on Manjaro Plasma Mobile and postmarketOS (with Plasma Mobile), but I also want to support more distros like NixOS/Aux, Mobian, and openSUSE, as a few examples (but not limited to these). I'd also like to support operating systems besides Linux such as FreeBSD if possible. Officially as of January 2, 2024 (technically earlier, but I don't know when it was), postmarketOS is my main target platform/OS due to its wide hardware support so I have to be able to use musl libc-based libraries, but I won't purposefully prevent it from running on glibc distros like DanctNIX (I also use EndeavourOS which is Arch, so I couldn't do that anyway because that would break testing easily).

Update March 6, 2025: my main goal is now an environment that works well in compositors like LabWC rather than the Plasma Mobile thing. I'll still keep the RetiledStart QML files separate in case a custom homescreen for Plasma Mobile is desired, but it won't be officially supported. If something breaks and it would be useful to upstream to my code, I'll accept it to make maintenance easier.

Required extra packages

You may need to install packages through your distro's package manager, and those are as follows; their names may vary by distro, but most of these are what Arch Linux ARM (and Manjaro ARM, by extension I guess) use (actually I'm mainly targeting postmarketOS now, so they may be different). Each package will say what it is in which distro if they're different.

Note: I'll have to probably update some items as they may be unclear.

Note 2: I'm rewriting my stuff in C++ so the only Python stuff I'll require when it's done is python, pybind11, and pyxdg since it's easy to get icons with those (couldn't find a simple equivalent for that in C++ that would just return icon paths). Eventually I'll drop the Python stuff except for a maybe or maybe not planned template project to make it easier to make programs that use Retiled settings and theming but isn't C++.

  • python: Used for getting icons in RetiledStart; should be Python 3, but I can't remember if the package itself is python3, so I'll need to check
  • python3-dev: Required for building if doing that on postmarketOS since the dev files aren't in the main Python package.
  • pybind11 (py3-pybind11 for runtime and py3-pybind11-dev for building, both on postmarketOS): Allows using Python libraries from C++, such as pyxdg which I use for getting icons.
    • NOTE: If you install pybind11 and/or python3-dev after trying to compile everything and try to compile again, you will probably get a message saying Python can't find libraries or something. In this case, delete the build directory and run cmake -S . -B build again
  • qt6-declarative (previously qt6-quickcontrols2; you will need qt6-qtdeclarative and qt6-qtdeclarative-dev on postmarketOS, but those should be installed when installing qt6-qtwayland-dev): Provides Qt6 QtQuick controls that are used in each component
  • qt6-qtdeclarative-private-dev: You will need this for building if you're doing it on postmarketOS or Alpine; other operating systems may require it, too. I don't know why it's required now.
  • Breeze icon theme: this is the default icon theme RetiledStart currently uses as of March 2025. Forgot to put this in the v0.1-DP3 package but whatever.
  • qt6-wayland (qt6-qtwayland on postmarketOS and Alpine, and maybe Fedora; you will also need qt6-qtwayland-dev to build the programs on Alpine and postmarketOS): Allows Qt6 apps like the ones included in Retiled to run under Wayland
  • Inter Display: the default font I use; there needs to be a way to choose a different one at runtime but I haven't done that yet
  • yaml-cpp (yaml-cpp-dev on postmarketOS is also required for building) (required to build and maybe use some of the C++-based programs like RetiledStart and GitRepoManager; this is also a runtime dependency)
  • inicpp.hpp: Included in the repo as a fork that allows read-only INI-like files to be opened and INI-like files in read-write locations to be written to by programs in read-only locations; original repo here: https://github.com/dujingning/inicpp and my fork is here: https://codeberg.org/DrewNaylor/inicpp-extended
  • pyxdg (on postmarketOS, this appears to be py3-xdg, and it appears to be python-pyxdg on Arch Linux [ARM] and probably also Manjaro [ARM]): Used for getting app icons at the moment as of April 13, 2023, but it's planned to be replaced by a port of it to C++ that I'll do. Note: This is the only thing that needs to be installed on top of a recent (March 2025) Plasma Mobile image of postmarketOS for RetiledStart to work; every other program featured with Retiled should work just fine with everything else that gets installed with Plasma Mobile.
  • qt6-svg (qt6-qtsvg on postmarketOS and thus Alpine): You'll need to install this so that SVG images will work. Without it, SVG images won't show up anywhere.
  • layer-shell-qt (runtime) and layer-shell-qt-dev (building); both package names are what they are on postmarketOS: using and building Layer Shell components like the navbar and status bar.
  • (削除) labwc: the Wayland compositor I'm trying to build everything around/for; I don't have a full config file yet (but you can put this in your rc.xml and it kinda works: #318 (comment) ; however, the scale needs to be set as does the keyboard layout [if you don't use LabWC's default keyboard layout] and the touch matrix, so it's not really usable with just the link above) and the navbar and status bar don't resize yet on output size change (will need to be fixed by me; LXQt has a way to do it correctly that I'll base stuff off of) (削除ここまで) LabWC isn't currently the main focus, that's switched to Sway, see here: #443
  • sway: the Wayland compositor I'm currently focused on making everything around. See here for example configuration options to get Retiled to work somewhat smoothly in it: https://codeberg.org/DrewNaylor/Retiled/src/branch/main/docs/running-retiled-in-sway.md as of August 27, 2025, requires being built from git with foreign-toplevel-image-capture protocol support
  • (削除) wlrctl (削除ここまで) swaymsg: switching windows in the navbar's (mostly-finished as of February 2026) window switcher; as of August 27, 2025, requires being built from git with foreign-toplevel-image-capture protocol support
  • grim: getting window thumbnail screenshots; requires version 1.5.0 or above with foreign-toplevel-image-capture protocol support.
  • wvkbd: Virtual keyboard for wlroots environments. This is used when you press the "toggle keyboard" button in the Action Center. The specific command is wvkbd-mobintl. Your accent color will be applied to the key presses.
  • wlroots: this is mainly for Sway itself; as of August 27, 2025, requires version 1.20 or higher, which can be built from git with foreign-toplevel-image-capture protocol support; you can build it as part of the Sway build as a subproject
  • KDE's Extra Cmake Modules (ECM) (extra-cmake-modules on Arch and Alpine/postmarketOS): (unsure if this is necessary, I could probably just not use it if it's just for the git commit hook I turned off because it was annoying) (for building only)
  • KDE Frameworks 6's Solid (solid and solid-dev on postmarketOS and Alpine, and solid on Arch Linux): Displaying battery percentage in the status bar; eventually more stuff will rely on this.
  • qt6-qtbase-dev (on postmarketOS and Alpine; Arch is supposed to have the -dev packages in the main package so it should just be in qt6-base): Needed to run qtpaths to find Qt's paths; see: https://github.com/trialuser02/qt6ct/issues/8 (for building only)
  • WaylandScanner: for building stuff that uses Wayland protocols, like the navbar and status bar (they use Layer Shell) (for building only I think)
  • WaylandProtocols: (wayland-protocols on postmarketOS and Alpine) to be scanned by WaylandScanner. (for building only I think)
  • cmake: for configuring build stuff for make and the compiler
  • make: compiling C++ stuff
  • either g++ (from gcc I'm pretty sure) or llvm (from clang) for compiling with cmake (these are the C++ compilers, either should work, and if they don't, it needs to be fixed) (for building only)
  • either gcc's C compiler or LLVM's C compiler (for building only)
  • libopengl0: Required if you want to run stuff on something like Linux Mint Cinnamon; not sure if this is installed by default on other distros, or if it's something that GTK ones lack; also not sure of the package name on non-Ubuntu distros.

License stuff

This project (Retiled) is Copyright (C) 2021-2026 Drew Naylor and is mostly licensed under the Gnu GPLv3 for almost everything but RetiledStart, which is GPLv2+; and RetiledStyles, which are mostly under LGPLv3 or GPLv2+ while a few files are LGPLv3 only, GPLv2 only, or GPLv3 only. Refer to each file for details. Relicensing was done because it's just easier to have it all under one or two main licenses. It could be GPLv2+ since some stuff is GPLv3(+) or sometimes (L)GPLv(2|3) only, but I don't know how to deal with that. This should be specified in all the code boilerplate areas though.

More license info: Licensed under mainly the Gnu GPLv3 but some stuff is under (L)GPLv3 and/or maybe GPLv2+ and/or LGPLv2+. Some files have a BSD license, some are MIT, and some are OFL. See source files for details. You can find a copy of the GPLv3, GPLv2, and LGPLv3 in ./LICENSES, along with all the other licenses used for stuff in this project with the project name added to the filename if needed. The Sway example config license is next to the example config.

Retiled uses the RetiledStyles project, which falls under the LGPLv3 or GPLv2+ for most files (some are modified versions of Qt's styles, so they can fall under the licenses those files fell under; a few files are LGPLv3 only, GPLv2 only, or GPLv3 only). See the files under ./RetiledStyles to be certain of their licenses and copyrights. Qt's license requires me to host my own copy of the code, and you can find that here: https://github.com/DrewNaylor/qtdeclarative

Code relating to qtwayland, which is the module used for the project in the RetiledCompositor folder, can be found here: https://github.com/DrewNaylor/qtwayland

RetiledCompositor is the old compositor used for Retiled for such things as the multitasking area and giving a place for the navigation bar, etc., and is sadly licensed under the Gnu GPLv3 due to qtwayland also being under the GPLv3 (I think it's GPLv3+ with the "+" being for any version that's ok'd by the KDE Free Qt Foundation, according to some source files in the repo) now. Any files that do not use GPL'd libraries directly will be licensed under one of these three licenses for as much flexibility as possible: the MIT License; the BSD License according to what Qt uses in the QML files or what any other source file uses; or the LGPLv3, which is what the RetiledStyles project's files are mainly under (most are available under GPLv2+ as well as LGPLv3, while some are only available under LGPLv3 only, GPLv2 only, or GPLv3 only due to what Qt had them licensed as; check each file for details). I'm not going to use RetiledCompositor anymore and instead will be making Layer Shell components to work with mainly Sway.

layer-shell-qt seems to be licensed under the LGPLv2.1 only or LGPLv3 only or LicenseRef-KDE-Accepted-LGPL.

Windows Phone and all other related copyrights and trademarks are property of Microsoft Corporation. All rights reserved.
Retiled is not associated with Microsoft in any way, and Microsoft does not endorse Retiled.
Qt (and I assume PySide6, since The Qt Company owns it) is Copyright (C) The Qt Company Ltd.

Inter (specifically, Inter Display, and v4.0 beta 8 was used for testing) is used for most of the text in the UI if installed, designed by and trademark Rasmus Andersson and Copyright (c) 2016-2020 The Inter Project Authors, licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).
Some glyphs are from the wp-metro font, which was made by AJ Troxell and is available under the SIL OFL 1.1; you can find a copy of this license in ./fonts/wp-metro/OFL.txt, as well as here:
http://scripts.sil.org/OFL.
You can find links to these fonts in the components list at the end of this "license stuff" block.

libdotdesktop-cpp is Copyright (C) Drew Naylor and is licensed under the MIT License. This library is from the DotDesktop4Win project.

yaml-cpp is licensed under the MIT License and Copyright (c) 2008-2015 Jesse Beder

inicpp-extended is my fork of inicpp, licensed under the MIT License and Copyright (C) 2023 dujingning and additionally for my fork Copyright (C) 2025 Drew Naylor.

pybind11 is licensed under a BSD-style license and Copyright (c) 2016 Wenzel Jakob wenzel.jakob@epfl.ch, All rights reserved.

pyxdg is used for the app icons in RetiledStart and licensed under the LGPLv2, and the copyright field in "docs/conf.py" states "2012, Sergey Kuleshov, Heinrich Wendel, Thomas Kluyver". I have my own fork for it that you can download from if needed, though: https://github.com/DrewNaylor/pyxdg Please see the project's homepage at the end of this quote block.

Python 3.9 copyrights start:
Copyright (c) 2001-2021 Python Software Foundation.
All Rights Reserved.
Copyright (c) 2000 BeOpen.com.
All Rights Reserved.
Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All Rights Reserved.
Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.
Python 3.9 copyrights end.
Python is licensed under the PSF License Agreement, which you can find a copy of here:
https://docs.python.org/3.9/license.html#psf-license

Any other copyrights and trademarks belong to their respective people and companies/organizations.

Components used by the Retiled project include libdotdesktop-cpp from DotDesktop4Win, Python, Qt, QML, C++, wp-metro, Inter, pyxdg, yaml-cpp, my fork of inicpp.hpp, inicpp-extended, layer-shell-qt, pybind11. Anything else that's used in the future will be added to this list.

Installation, Uninstallation, Building, and Running

Please note: You'll have to install the dependencies manually, as they're not integrated into the script yet.

Important: It might not fully build the first time as that happened on my PinePhone once and I don't know why, but doing it again should work.

One thing I do need to say to comply with the (L)GPL is that you can replace the files in the RetiledStyles directory if you want to use different files than what I provide, either by switching them out of the package then running the install script, or by replacing them as root when installed by changing the files in /opt/Retiled/RetiledStyles.

  • Installation
    1. Install the packages in the Required Extra Packages section. These packages should be what they're named in Arch Linux and postmarketOS. I assume that you'll already have Python 3 installed, but if not, you'll also have to install it.
    2. Install git if you haven't, and clone the repo using git clone https://codeberg.org/DrewNaylor/Retiled
    3. cd into Retiled/Scripts
    4. Run sh build-install-retiled.sh. The C++ code will be compiled, then you'll be prompted with sudo asking your password to install (if you haven't entered it recently). If you're using a binary package, just use sh install-retiled.sh
    5. You should find the items for RetiledStart and RetiledSearch in your app list. If not (can happen with Plasma Mobile, which is the UI that this is recommended to be run using until the layer shell components are ready for use with LabWC), you'll need to restart your phone.
  • Uninstallation
    1. cd back into retiled/Scripts in the repo you cloned earlier, or clone it again if you deleted it.
    2. Run sh uninstall-retiled.sh. You'll be prompted for your password by sudo so that it can delete the files and folders used by Retiled, mainly these:
    • /opt/Retiled/*
    • /usr/share/applications/retiledstart.desktop
    • /usr/share/applications/retiledsearch.desktop
    • /usr/share/applications/retiledsettings.desktop
    • /usr/bin/retiledstart
    • /usr/bin/retiledsearch
    • /usr/bin/retiledsettings
  • Building
    • cd into Scripts, then run sh build-retiled.sh, or manually run the commands from the root folder of the repo (note that these manual commands may be outdated so maybe check that script yourself):

      1. cmake -S . -B build
      2. cd ./build
      3. make
      4. cp -rv ../RetiledThemes ./bin
      5. cp -rv ../RetiledStyles ./bin
      6. cp -rv ../RetiledSettings/configs ./bin/RetiledSettings
      7. cp -rv ../icons ./bin
      8. cp -rv ../fonts ./bin
      9. cp -v ../RetiledStart/RetiledStart/pages/wallpaper.jpg ./bin/wallpaper.jpg
      10. cp -v ../RetiledStart/RetiledStart/pages/startlayout.yaml ./bin/startlayout.yaml
      11. All in one command (hopefully it works):
      cmake -S . -B build && cd ./build && make && cp -rv ../RetiledThemes ./bin && cp -rv ../RetiledStyles ./bin && cp -rv ../RetiledSettings/configs ./bin/RetiledSettings && cp -rv ../icons ./bin && cp -rv ../fonts ./bin && cp -v ../RetiledStart/RetiledStart/pages/wallpaper.jpg ./bin/wallpaper.jpg && cp -v ../RetiledStart/RetiledStart/pages/startlayout.yaml ./bin/startlayout.yaml
      
    • Please ensure all the dependencies listed above are installed first, or building (and running) won't work. Note that Sway, grim, and swaymsg are optional and only required if you want to try out Retiled in Sway until Retiled is its own environment (but you'll be able to run the apps anywhere), and Inter Display is recommended.

    • Building is only intended for Linux or another OS with sh scripting capability. As a result, there's no .bat script, nor is there support for building on Windows. This may change in the future if there's something that ends up using it on Windows or a Windows-compatible system.

  • Running
    • Linux
      • After building, cd into ./build/bin from the root of the repo and run something with, for example, ./retiledstart. Note that you'll need to have stuff like RetiledStyles in the bin folder for this to work.
      • I don't know if this is still a problem for the C++-based apps, but I'm keeping it anyway for troubleshooting:
        • If you run the Python/QML-based apps on Phosh without first rebooting after installing the required extra packages, the keyboard may not display the letters properly, and instead show boxes. This doesn't seem to be permanent, as rebooting fixes the issue. However, running the Python/QML-based apps after a reboot may have Qt say that it's ignoring Wayland on Gnome, so it'll use Xwayland instead. You'll have to run QT_QPA_PLATFORM=wayland python main.py to make it use Wayland. This command will be integrated into a launcher script to make things easy (actually, not sure about that now, as that could make things more difficult and my goal is to focus on running the apps on Wayland even on Plasma Mobile...). Additionally, there's a titlebar when running with Wayland under Phosh. I'd like to have it only appear when in docked mode, although some apps may be better to have no window borders in docked mode and instead appear next to the panel, like RetiledStart.

Video demos

Screenshots

Below are some screenshots in case you want to see how things are going so far. Some may be updated separately from the rest so recent changes might not show up in every screenshot. I might not update the screenshots here very often either, so I'd recommend following me on Mastodon as I'll occasionally post screenshots for the feature I'm working on at the moment. It's not always Retiled screenshots, though. There may also be more screenshots under docs/images that I haven't linked here.

RetiledStart showing a set of tiles (with icons) of various sizes while running in Plasma Mobile on the PinePhone:


Tiles with tile wallpaper:


Semi-transparent tiles with standard wallpaper:


Tiles in edit mode:


"Manually move tile" dialog since drag and drop isn't implemented yet:


Three-column layout; note that it's not perfect yet as shown by the tile text being a little too big and the margins on the sides of the page being slightly off:


All Apps list item context menu showing the "pin to start" button and that the other apps get faded out and smaller like they're supposed to, plus icons are visible:


All Apps list:


RetiledSearch running on the PinePhone:


Appbar menu in the search app showing the "about" button:


"about" page in the search app:


RetiledSettings showing the start+theme page with editable textboxes and a toggle switch for various theme and Start screen-related settings:


RetiledSettings showing the ease of access page with some toggle switches for turning on and off tilting, parallax scrolling, and the tile sliding around animation when in edit mode: