Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/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://github.com/drewnaylor/retiled

linux linux-mobile linux-phones live-tile metro metro-ui pinephone python qml qt6 qtquick tiles windows-phone windows-phone-ui

Last synced: about 1 month ago
JSON representation

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.

Awesome Lists containing this project

README

        

# 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:
- Start screen
- Search app
- Navigation bar
- Action Center
- Status bar
- [And more, with an entire list that was too long for the readme](/docs/eventual-feature-and-behavior-list.md)

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.
- `python`: Used to run most of Retiled; should be Python 3 (using Python 3.9.x, specifically, **but my goal is to use the latest version of Python when possible, so it may not be 3.9.x by the time you read this**), but I can't remember if the package itself is `python3`, so I'll need to check
- `pyside6` (`PySide6` via pip, which may be necessary on Fedora; `py3-pyside6` on postmarketOS): Used for the UI of Python/QML-based components of Retiled
- `qt6-declarative` (previously `qt6-quickcontrols2`): Provides Qt6 QtQuick controls that are used in each component
- `qt6-wayland` (`qt6-qtwayland` on Fedora): Allows Qt6 apps like the ones included in Retiled to run under Wayland, and also allows RetiledCompositor to run
- `pyyaml` (`PyYAML` via pip, `py3-yaml` in Alpine and probably also postmarketOS, `python-yaml` in Arch Linux ARM and probably Manjaro ARM, `python3-pyyaml` in Fedora; no longer provided via this repo, so it'll have to be installed manually, whether that be via `pip` [newest] or from your package manager [possibly outdated]): Helps read and write yaml files, which are used for RetiledStart's layout file.
- `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): Mainly used for getting app icons at the moment as of April 13, 2023, but usage of it may expand.
- `qt6-svg`: You'll need to install this so that SVG images will work. Without it, SVG images won't show up anywhere.
- `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-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](https://github.com/drewnaylor/dotdesktop4win), Python, Qt, QML, PySide6, PyYAML, [wp-metro](https://github.com/ajtroxell/wp-metro), [Inter](https://github.com/rsms/inter), [pyxdg](https://www.freedesktop.org/wiki/Software/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](https://github.com/DrewNaylor/Retiled/blob/main/docs/changelogs/v0.1-DP1.md#how-to-use) 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.

- Installation
1. Install `pyside6` (`py3-pyside6` on postmarketOS), `qt6-quickcontrols2` (may be the same thing as `qt6-declarative` now, so if the other name doesn't work, try this one), `qt6-wayland` (may also be `qt6-qtwayland` on pmOS), `pyxdg` (`py3-xdg` on pmOS). These packages should be what they're named in Arch Linux ARM/Manjaro ARM, but I haven't used it much lately and I mostly use Fedora in a VM and postmarketOS on my PinePhone. 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://github.com/DrewNaylor/Retiled`
3. `cd` into `Retiled/Scripts`
4. Run `sh install-retiled.sh`. The Python scripts will be compiled, then you'll be prompted with `sudo` asking your password to install (if you haven't entered it recently).
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 RetiledCompositor is ready for use due to also using Qt), 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 `/opt/Retiled/*`, `/usr/share/applications/retiledstart.desktop`, and `/usr/share/applications/retiledsearch.desktop`.
- Building
- You shouldn't have to build Python scripts, but if you want to, `cd` into `Scripts`, then run `sh build-retiledstart.sh` or `sh build-retiledsearch.sh`, depending on which you want to build.
- Please ensure Python 3 is installed first, or building (and running) won't work.
- Building is only intended for the step before installing on the destination device, which is typically expected to run 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
- Windows
- To run RetiledStart, follow the instructions for running RetiledSearch, but use the `RetiledStart/RetiledStart` directory instead.
- To run RetiledActionCenter, follow the instructions for running RetiledSearch, but use the `RetiledActionCenter` directory instead.
- To run RetiledSearch, set up and activate your venv with Python 3.9 (or later, which is preferred if it doesn't break things) and the pip packages listed above, then refer to the line below regarding running Python/QML apps on Linux.
- Linux
- To run RetiledStart, RetiledSearch, or RetiledActionCenter, please refer to the line below regarding running Python/QML-based apps.
- To run RetiledCompositor, please refer to the [instructions on running the compositor in /docs](/docs/running-the-compositor.md).
- Running Python/QML-based apps requires installing the relevant packages as described in the `Building` section (desktop Linux can probably use the pip packages), then for
- RetiledSearch:
- `cd` into `RetiledSearch/RetiledSearch`
- Run `python main.py`
- RetiledStart:
- `cd` into `RetiledStart/RetiledStart`
- Run `python main.py`
- RetiledActionCenter:
- `cd` into `RetiledActionCenter`
- Run `python main.py`
- 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

- [RetiledStart prototype running on the PinePhone (demo #1)](https://youtu.be/NpUnrb1wC_8)
- [RetiledStart demo #2: All Apps list prototype + improved tiles](https://youtu.be/GVt1WAN-w04)
- [RetiledStart demo #3: Launching Apps from the All Apps List in Portrait Mode](https://youtu.be/VHvdnHaz9G8)
- [RetiledStart demo #4: Landscape All Apps List](https://youtu.be/FGZ3E5nqb0s)
- [RetiledSearch demo #1: Doing a search on the PinePhone](https://youtu.be/SEua4VDVxM8)
- [RetiledStart demo #5: Pinning, Unpinning, and Resizing Tiles](https://youtu.be/lvbaCgOvsik)
- [RetiledCompositor demo #1: Early Compositor Demo](https://www.youtube.com/watch?v=jURqf86CS0I)
- [RetiledActionCenter demo #1: Flashlight Toggle Showcase](https://m.youtube.com/watch?v=_xcpuhhv5TE)

## 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](https://mastodon.online/@DrewNaylor) 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: