DrewNaylor / 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 the Start screen, Search app, navigation bar, Action Center, and the status bar. Development is mainly being done using the PinePhone, so that'll be the main supported device.
https://codeberg.org/DrewNaylor/Retiled
Apache License 2.0
69 stars 3 forks source link
linux linux-mobile linux-phones live-tile metro metro-ui pinephone python qml qt6 qtquick tiles windows-phone windows-phone-ui

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:

Development is mainly being done using the PinePhone, 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 Python and Qt/QML/PySide6 which means development goes a little slowly, but I'm learning.

NB: I'm migrating to Codeberg. The canonical repo for Retiled is now here, please update your remotes: https://codeberg.org/DrewNaylor/Retiled

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)"

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 (I like its philosophy), 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.

Note: I'm thinking about just forking Plasma Mobile instead of writing my own compositor, so I will need to relicense the code under the Apache License, 2.0 (except libdotdesktop_py; that'll be MIT Licensed) that is Copyright (C) Drew Naylor, to be under the GPLv3+, or the most compatible license depending on the file. Below is a statement in detail:
If I don't get around it, I, Drew Naylor, hereby declare as of February 26, 2023, that all Apache License, 2.0 files and modifications to files in this repo (except for libdotdesktop_py; that will be under the MIT License if possible; other libraries that are Copyright (C) Drew Naylor and used by the Qt version of Retiled but are not reliant on Qt directly will become under the MIT License and I will change that, but if I don't, I also give permission to change that) that are Copyright (C) Drew Naylor are now under the Gnu GPLv3+ and I give anyone who isn't me permission to change the license in the code to the GPLv3+. Hopefully this is a legal-enough statement. If this is not fully compatible with all of the main Plasma Mobile (and other related projects like Plasma Desktop and the Maliit keyboard and such) code, then I give permission to change to the most-compatible GPL or LGPL version, but this only applies to code Copyright (C) Drew Naylor. There may be instances where the code needs to conform to the license of specific files and programs if it's otherwise not compatible with the GPLv3+, so I also give permission to do that only for code that is Copyright (C) Drew Naylor.

Regarding my note above discussing forking Plasma Mobile, I may also just do a Look-and-Feel package for Plasma Mobile, but there needs to be a way to also run everything outside Plasma (Mobile), both for development, as well as for anyone that wants to run it as, say, a launcher that can just be opened by a key on the keyboard in a standard wlroots Wayland compositor like Sway. I'm thinking what could work would be a QML file just for integration with Plasma Mobile and one for displaying as a launcher popup window with LayerShell. Both of these QML files will load the Tiles page, but they will handle things so Tiles.qml doesn't have to and they'll feed in data differently so that both environments can be kept happy.

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 mostly using postmarketOS now, so they may be different). The ones that say "via pip" are extra ones that will have to be installed if not on something like the PinePhone or if it's not installed by default/in your package manager, otherwise the package name on the left side will have to be installed via the distro's package manager like pacman unless that's not the package's name as described in the parenthesis; the packages that aren't listed as being from pip aren't usually in pip, but sometimes I might just have been lazy and didn't check.

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

License stuff

This project (Retiled) is Copyright (C) 2021-2023 Drew Naylor and is licensed under the Apache License 2.0, but soon to be GPLv3(+?) as I'm planning on making it mainly a Look-and-Feel package for (or if that won't work, a fork of) Plasma Mobile (but still have it so that certain programs like RetiledStart can run independently of Plasma Mobile if desired).
Retiled uses the RetiledStyles project, which falls under the LGPLv3 for most files (some are modified versions of Qt's styles, so they can fall under the licenses those files fell under). 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 (I hope the qtdeclarative repo is enough, as that's where I assume PySide6 gets its styles from, and PySide6 doesn't actually include any of the styles in its repo): 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 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 Apache License, Version 2.0; the BSD License according to what Qt uses in the QML files; or the LGPLv3, which is what the RetiledStyles project's files are under.

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_py is Copyright (C) Drew Naylor and is licensed under the MIT License. This library is from the DotDesktop4Win project.
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. PyYAML is licensed under the MIT License and is Copyright (c) 2017-2021 Ingy döt Net and Copyright (c) 2006-2016 Kirill Simonov.

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 of the Retiled project include libdotdesktop_py from DotDesktop4Win, Python, Qt, QML, PySide6, PyYAML, wp-metro, Inter, pyxdg. 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.

These instructions aren't up to date with the zip file in the releases, so I'd recommend checking the "how to use" guide for installation instructions for released versions. 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.

Actually, these instructions may be more up-to-date than what's in the v0.1 DP1's package (even though I don't recommend that version anymore as if I remember correctly, it has major bugs fixed, those being mainly in the All Apps list and they showed up well after it was released due to what I think is a change in Qt), so if you can't figure out what's going on with those files, check these instructions. The instructions will be unified for v0.1 DP2.

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.

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


Tiles in edit mode:


Tiles with icons:

All Apps list:


All Apps list item context menu showing the "pin to start" button:

All Apps list with icons (is this a good size for the icons? If it's not, please let me know. I've changed this slightly after taking this screenshot, too):


RetiledSearch running on the PinePhone:


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


"about" page in the search app:


Three-column layout test: