Flatseal 2.0

To celebrate Flatseal reaching 800,000 downloads on Flathub 🤯, a new release is out! Flatseal 2.0 comes with improved visuals powered by GTK 4 and Libadwaita and, with that, a few quality of life improvements and bug fixes.

Kudos to @natasria for the initial work on porting the user interface to GTK 4 and Libadwaita, and to @A6GibKm for helping with the reviews and making a lot of further improvements to that work.

As a result, the user interface looks cleaner and incorporates many of Libadwaita goodies like the mobile-friendly about-me dialog, among other things.

Also, this release includes a few quality of life improvements and bug fixes, e.g. typing to search for applications and a popover with suggestions for auto-completing XDG directories. See the full list here.

There are a few improvements and new features that didn’t make it to the release, e.g. incorporating even more Libadwaita widgets, new translations, and detecting when applications have been installed, removed or updated to allow users reload the applications list. So expect a follow-up release, shortly.

Last but never least, a big thanks to @rusty-snake for always keeping an eye on the issue tracker and answering people’s questions.

Portfolio 0.9.15

After a long hiatus, a new release of Portfolio is out 📱🤓. This new release comes with important bug fixes, small-detail additions and a few visual improvements.

In terms of visuals, by popular demand, the most notable change is the use of regular icons for the files browser view. It should be easier now to quickly catch what each file is about. Thanks to @AngelTomkins for the initial implementation, @Exalm for helping with the reviews, and to the GNOME design team for such lovely new icons.

Another addition is support for system-wide style management. This is specially useful now that desktops like GNOME provide quick toggle buttons to switch between dark and light modes. Thanks to @pabloyoyoista for the initial implementation.

One small-detail change to the properties view is the addition of file permissions.  Plus, the properties view was broken down into three different sections to reduce the visual load, and labels can now be selected which is useful for copying locations or ellipsized values.

Moving on to bug fixes, two important changes landed. The first one solves an issue which prevented opening files with special characters 🤦. Thanks to @jwaataja for detecting and fixing this issue. The second one solves an issue with Portfolio not properly detecting mount points under some specific conditions. Thanks to mo2mo for reaching out and sharing his system details, so I could figure this out.

Last but never least, many thanks to @carlosgonz0, @Vistaus, @rffontenelle, @AsciiWolf, and @eson57 for keeping translations up to date, and  to @rene-coty for the new French translation.

Flatseal 1.8.0

I am happy to announce a new release of Flatseal 🎉. This new release comes with the ability to review and modify global overrides, highlight changes made by users, follow system-level color schemes, support for more languages and a few bugs fixes.

Let’s start with bug fixes. Since Flatpak 1.12.4, removing filesystem permissions with modes in Flatseal caused Flatpak to warn people about the mode being included as part of the override. Justifiably, this confused many. With this release, it will no longer include these modes, e.g. :ro,  when removing filesystem permissions.

Although Flatseal main distribution is Flatpak, there are people who prefer to install it from their regular package manager. So, I included a fix which handles the creation of the overrides directory. Under Flatpak, this scenario is handled by permissions themselves.

Moving on to new features, @A6GibKm added support for the new system-level color schemes recently added to GNOME. Plus, he streamlined both shortcuts and documentation windows behavior by making both modal.

The main feature I focused on for this release is the ability to review and modify global overrides, which is actually three features in one. Let me elaborate.

Currently, when people look at a particular application permissions they are actually seeing the mix of two things: a) the original permissions that came with that application and b) the permissions changed by them. But there’s a third source of changes that wasn’t taken into account, and that is global overrides.

So, the first part was to make Flatseal aware of these global overrides. That means, when people look at an application permissions, these global overrides need to be accounted for and displayed. With this release, all sources of permissions changes are taken into account. Now, what you see is effectively and exactly what the application can or can’t do.

But this introduces a new problem or, better said, it exacerbates an existing one. It goes like this; people go to Flatseal, select an application, switch a few options and close it. Next day, they go back, select the same application and have absolutely no idea what changed the day before. This only gets worse when introducing global overrides to the mix.

Therefore, the second part was to extend Flatseal models to differentiate between original permissions and the two types of overrides, and to expose that information to the UI. Now, with this release, every permission changed by the user or globally is highlighted as shown above. This includes tooltips to let people know exactly where the change came from.

Lastly, the third part was to expose global overrides themselves to the UI, so people can review and modify these. I tried different approaches as for how to expose this but, finally, I let occam’s razor decide. I exposed global overrides as-if it was just another application, under an “All Applications” sticky item on the applications lists.

The benefit of this approach is that it’s quite easy to find, and even search, and it’s literally the same interface as for applications. But simplicity comes with a price.

If you’re a heavy user of Flatseal you probably noticed that it only allows to a) grant permissions that the applications don’t have or b) remove permissions that the applications have but, with the exception of filesystem permissions, c) it doesn’t allow to remove permissions that the applications don’t have.

Of course, most of the time, this wouldn’t even make sense for a particular application, but it is a limitation when thinking in terms of global overrides. So unfortunately, you can’t go and remove network access for all your applications in one click. At least not just yet.

Moving on to translations, support for Bulgarian, Danish and Chinese (China) languages were added by @RacerBG@exponentactivity, @EricZhang456 respectively. Big kudos to @libreajans, @AsciiWolf, @Vistaus, @cho2, @eson57, @daPhipz, @ovari, @TheEvilSkeleton,  and @Garbulix for keeping translations up to date.

Moving forward, I would like to revise the backend models to remove some of the limitations I mentioned earlier, polish the global overrides UI, and finally port it to GTK4 and Libadwaita.

Last but not least, special kudos to @rusty-snake for always keeping an eye on newly opened issues and patiently responding to people’s doubts.

Portfolio 0.9.13

After  a few months of slow but steady progress, a new release of Portfolio is out 📱🤓. This new release comes with the ability to fully manage external devices, better feedback and responsiveness when copying big files to slow devices and many bugs fixes.

By popular demand, the main addition to Portfolio is the ability to fully manage external devices, this means; detecting external devices, unlocking encrypted devices, mounting and ejecting. For this release, I focused on getting the udisks2 integration right, but there’s still room for improvement on the UX department. A shout out to @ahoneybun for testing my two previous (and unsuccessful 😅) attempts to implement this.

Another noticeable improvement is that now copying operations display progress feedback on individual files. Previously, there wasn’t any, which led to the impression of “no feedback at all” when copying big files.

A related improvement is that copying operations now do a better job displaying the real progress, specially when copying files to slow external devices. No more suspiciously fast copying operations, which later turn into several minutes of undetermined wait time when ejecting these devices.

On the bug fixing department, hidden Trash folders are no longer created on external devices until they’re really needed, send to Trash button won’t show on devices with no Trash folder, Portfolio no longer crashes on the Sway tiling compositor, broken symlinks are now handled properly and the same file size unit is used consistently through all the application.

Moving forward, for the short term, I want to improve the external devices management UX and give these beautiful GNOME 42 folder icons a try 🤩. For the long term, I would love to port this application to GTK4 and Libadwaita.

Last but not least, special thanks to @lqs01, @AsciiWolf, @Vistaus, @eson57, @cho2, @rffontenelle and @carlosgonz0 for keeping their translations up to date, and to @craftyguy for helping me with  general testing.

Flatseal 1.7.5

A new Flatseal release is out 🥳🎉, and it comes with subtle visual improvements, a few bugs fixes, one more permission and a big quality of life improvement.

Starting with the visuals, @BrainBlasted replaced the custom widgets, used in the applications list, for proper libhandy’s widgets. Plus, he fixed a small styling detail to make applications icons look sharper!

This change results in more consistent visuals and less custom code for me to maintain 😊

On the permissions side of things, @Arxcis added support for  the per-app-dev-shm permission, which was added to Flatpak a few releases ago.  Also, I extended the Other files subsection to allow negated filesystem overrides, e.g. !home.

Moving on to quality of life improvements, I took the time to make the UI fully usable with keyboard input. For some of us, who prefer the keyboard, this makes the UI faster to navigate. For other people, it makes Flatseal accessible for the first time. Thanks to @sophie-h for reminding me of this 🙌

With a good combination of shortcuts and mnemonics Flatseal has finally become keyboard friendly. Still far from perfect, but it’s the perfect start.

On the bug fixing front, @Arxcis fixed an issue that prevented users from overriding originally-negated permissions, and I fixed a couple more that caused undefined values to appear in override files. Although these were very rare, both issues were present since the original version of Flatseal.

Additionally, by popular demand, applications are now sorted by the application’s name 😅

Last but never least, thanks to @AsciiWolf, @ovari, @cho2, @Vistaus, @BigmenPixel0 and @eson57 for keeping their translations up to date, and to @TheEvilSkeleton and @usnotv for new French and Turkish translations, respectively.

Portfolio 0.9.11

Catching up

The last couple of months have been particularly busy:

  • A few more releases down the road, the portal permissions support in Flatseal has finally matured. I took the opportunity to fix a crash in Flatpak’s permission store and to complete its permissions API, to pave the way for existing and future Flatseal-like front ends.
  • I took a short break to take care of my twenty five Sugar applications. Released a new version of the BaseApp, and updated every application to the latest upstream release and GNOME runtime.
  • On a personal note, I have been mentoring some brilliant interns at work, which is a refreshing experience after so many months of lockdown due to COVID.

What’s new in Portfolio?

On the visuals department, this new release brings a refreshed icon by @jimmac, which looks fantastic and takes it closer to the modern art style in GNOME.

Regarding features, well, there’s quite a lot. The most noticeable one is the Trash folder.

One of my goals for Portfolio is that, for the little it does, it should just work™.  It shouldn’t matter what the users environment might be or how it’s being distributed. This imposes some technical challenges and, I imagine, is one of the reasons why a few file managers available on Flathub don’t provide feature parity with their non-flatpak versions.

Because of this, I prototyped different Trash folder implementations. Initially, I went for the right way™ and simply relied on the gvfsd. Sadly, there were a few issues with the sandbox interaction that prevented me from fulfilling my goal. Therefore, I stuck to my own implementation of freedesktop’s Trash spec. I must admit though, that I really enjoy reading these specs for Portfolio.

But there’s more!

A common issue among users, of the Flatpak version, is that they can’t see the real root directory. This is understandably confusing. Therefore, Portfolio now includes a Host device shortcut, as a best-effort attempt to mitigate this.

If you have been using Portfolio on devices with slow storage, you have probably seen that loading screen a few times when opening folders. I will eventually get around to something more elaborated but, for the time being, I reduced these load times with a bit of cache.

Among other improvements, there are now proper notifications when removing devices, filtering and sorting options will persist between sessions, and the files view will restore its scroll position to the previous directory when navigating back.

As for the bugs, kudos to @craftyguy for fixing a couple ones that prevented Portfolio to run on Postmarket OS.

Last but never least! Thanks to @lqs01, @AsciiWolf, @eson57, @Vistaus, @rffontenelle and @cho2 for helping me with translations.

Flatseal 1.7.0

A big new release of Flatseal is out! It took a bit longer, due to that little Portfolio detour 😅, but it finally happened. This release introduces some subtle improvements to the UI, along with one major new feature; initial support for Portals.

Starting with the UI improvements, a massive libhandy’fication happened. Main widgets such as the window, groups and permissions rows are now using libhandy widgets. This helped to remove a lot of custom code, but also brought neat little details like rounded corners, the ability to toggle permissions by simply tapping the rows, among other things. Thanks to @BrainBlasted for starting this work.

The applications search entry can now be toggled, and its position is now independent of the scrolled window. Not having to scroll back to the top to change the search terms, makes it a bit more usable.

This release comes with an offline version of Flatseal’s documentation, thanks to a newly-added viewer. For now, the documentation is only available in English. I am hoping to improve the document before any attempt to translate it. Thanks to Apostrophe for such nice exporters 🙂.

Moving on to the new big feature, yes, portals! With this release, it’s now possible to review and manage dynamic permissions. Thank @hferreiro for requesting this feature.

This initial support includes six of the most basic permissions. The plan is to support as many of these, as long as it makes sense of course. Having said that, a few important notes:

  • Not all dynamic permissions rely on stored “decisions” and, therefore, there’s nothing for Flatseal to manage.
  • Not all Flatpak applications use portals currently and, therefore, many of these new options won’t be very useful until portals get more adoption.
  • It is expected to see many of these permissions “grayed out”. Check the tooltips for the specific reason but, it is likely due to the fact that some of these portals have not been used yet and, therefore, have not set up any data for Flatseal to manage.

Well, that’s it for now. Any suggestions, ideas, bugs, I am always available. And if you haven’t tried Flatseal yet, I recommend getting it from Flathub.

Last but never least, thanks to everyone who contributed to this release, @BrainBlasted, @cho2@Vistaus, @ovari, @eson57, @TheEvilSkeleton, @AsciiWolf and @MiloCasagrande.

Sugar Learning Tools – Part III

Catching up

The last couple of months have been hectic: more Sugar applications with Flatpak, quality of life improvements to Flatseal, tinkered with the idea of a Flathub-based OS for phones, showed case the tools to create modern native applications with JavaScript, shared my views on how Flatpak is reshaping the desktop’s future, teased the GNOME Circle at the Linux App Summit, planted the initial seeds to kickstart the GNOME community in my home country, started contributing to Flathub’s backend and other non-desktop projects (oh, yeah, and then my actual job 😂).

For this post though, I would like to focus on the progress made to Sugar applications with Flatpak.

Sugar Learning Tools

During my GUADEC presentation I mentioned the things I wanted to achieve moving forward with this project. Primarily, improving the documentation and porting guide to ensure that this project can scale and, of course, port more art-oriented applications.

For improving the documentation, I ported Sugar’s official “hello world” and re-wrote the porting guide based on this application. By using this minimal application as an example, it becomes much easier to highlight the key porting steps and concepts. I also took the opportunity to update the application itself to the latest version of the Sugar toolkit.

As for porting new applications, I didn’t get to port as many art-oriented applications as I wished. Mostly due to the fact that most of those are still using GTK2 and Python2, so it would require more time I can afford at the moment. Nevertheless, I ported some pretty awesome ones.

Paint is a playful painting application. It provides all the classic tools a young learner would expect, e.g. brushes, shapes, text, transformations, adding images, etc. Plus, it can enable sounds to make the experience extra funny.

Pukllanapac is a Rubik’s Cube-like game. The objective is for the learner to exercise their problem solving skills. The application has different patterns for circles, triangles, and hexagons.

Solar System is an interactive visualization. The goal is encourage the learner to know more about the planets and their moons. In words of the original developer of this application (@cvgarciarea) :

It is my hope that this tool serves as a practical and interactive way to explore astronomy.

It’s worth noticing that he was one of the early young Sugar hackers that showed up, when the Uruguayan government introduced OLPC nation wide.

Swift Feet provides a series of entertaining physical activities. It encourages  the learner to stay active. Includes exercises and dances. This application was originally designed for OLPC Canada in collaboration with ParticipACTION Canada and Ophea organizations.

Sugar Chess is a friendlier front-end for gnuchess. Its features go beyond and above other popular chess applications, e.g. allows the learner to customize the graphics, replay matches, use different modes, and more.

Moving forward

There’re still plenty of applications that need to be ported but, for the time being, I need to find a better way to monitor these twenty five applications that were ported so far.

I have discussed the idea of a developer Dashboard with Flathub’s maintainers but, for the short term, I might end up hacking something quick for my own needs.

Another imminent task is to update the BaseApp and all applications to the latest GNOME runtime, but this should be trivial. If anyone is interested in learning about packaging applications with Flatpak this task could be good a opportunity, so feel free to contact me!

 

GUADEC 2020 and Flatseal 1.6.1

GUADEC 2020

Two weeks ago, I had the chance to share my experiences Flooding the desktop with learning tools, with the wider GNOME community at GUADEC Even though the event went online for the first time, due to COVID-19, it went pretty smooth!

The event was full of great talks, including many from former colleagues, Archaeology of Accessibility by @ebassi, Parental controls in GNOME by @pwithnall, What’s new with JavaScript in GNOME by @ptomato, Communication Hacks by @1nuritzi and many, many others.

The social hours were hilarious and was great to see so many familiar faces. I am really hoping that, whenever we go back to physical events, we can still keep this online experience for those unable to assist.

Flatseal 1.6.1

Since the previous release, I have been slowly making improvements and have finally collected enough of these for a new release.

What’s new?

I started with a second pass on the big refactor I made for 1.6.0. I finally got rid of some “evolutionary” leftovers, and made all the individual permissions models even more self-contained. Again, this makes things much easier to extend and maintain.

Before I move on to the user-visible work, a few words about this project. Flatseal uses overrides as its backend to modify permissions, but it’s really more than just a graphical version of flatpak-override command-line tool. What I am (at least) trying to do with this project is to provide an improved experience for how Flatpak users interact with their applications permissions.

The most noticeable change in this release happens to be a good example of that.

This release adds support for session-bus and system-bus overrides. Users can remove, add or modify existing bus names. Thanks to @digitalethics for requesting this feature.

Being able to modify an existing bus name without having to explicitly think in terms of removing an existing name and adding a new one, seems trivial, but it’s quite an improved experienced already. The model is “smart” enough to detect these changes and translate these properly to one or more overrides. Like this, every switch and text entry in Flatseal went through these kind of considerations.

This release also adds other minor changes, including a fix for cases where applications icons were missing (e.g. for LibreOffice), a small change in the permissions groups labels to match even closer the terms used in flatpak-run and flatpak-override (e.g. “allow” instead of “features“), a fix that prevents Flatseal from crashing when multiple versions of libhandy are available (e.g. when running non-flatpak versions of Flatseal) by @fushinari , among other even minor fixes.

What’s next?

As I mentioned in my previous blog post, my short term goal was to keep adding support for more overrides. Now that Flatseal has almost reached feature-parity with flatpak-override, and that the model representation is way more readable, I will start to reach out to some people from the community to see if they would be interested in seeing Flatseal model moved into a separate library. Help will be welcome!

Last but never least, special thanks to @eson57, @AsciiWolf, @ovari@cho2 , @Vistaus and others for keeping Flatseal translations up to date.

Flatseal 1.6.0 and beyond

It’s been five months since the original release of Flatseal. Seventeen releases later, this project has evolved incredibly fast thanks to the Flatpak community.

Flatseal is a graphical utility to review and modify basic permissions from your Flatpak applications.

When I started this project as a weekend-long challenge, I considered the possibility of creating something useful but, I clearly did not expect such overwhelming reception.

From the first Flathub discourse members testing it, to having a humble chunk of the Flatpak community using and recommending it, this has been a really fun experience that I’d love to share in more detail at some point.

For now, I would simply like to thank everyone who contributed so far and share the new things coming with the 1.6.0 release.

So, what’s new?

The biggest change in this release is the complete rewrite of how Flatseal manages and mixes permissions and overrides. This is one of those things that no one should ever notice, when it goes well of course. In this case though, these changes makes it easier to expand Flatseal with new override options and, more importantly, to maintain it.

To put these changes to test, I added support for two new overrides options: persistent  homedir-relative paths and environment variables.

You can add new persistent homedir-relative paths. Even though this override is not the most commonly used one, it has proven to be quite useful. Thanks to @ManIVIctorious for the suggestion.
You can add, remove or modify the environment variables that are exported to the application. Thanks to @trashcan55 for the suggestion. I have been using this quite a lot myself to debug Flatseal.

Another key feature, made possible with the rewrite, is that Flatseal is now fully aware of overrides that it doesn’t support. If you have been using Flatseal and flatpak-override CLI together you know exactly what I am talking about.

Before this release, Flatseal would only load the overrides that it did support, and later drop the ones that didn’t. Of course this caused confusion and headaches to people using both tools. Well, these will be kept intact from now on, making Flatseal future proof at the same time.  Thanks @WhyNotHugo for highlighting this issue.

Before moving on to other changes, I would really like to give special thanks to Tobias Bernard @bertob for all the design ideas, mockups and feedback from the very beginning of this project.

Talking about Tobias and his ideas, now Flatseal displays basic information for applications. Aside for the obvious usefulness of this information, e.g. for troubleshooting, I like to see this as a small tribute to applications developers.

The title, author, version, last-updated date and Flatpak runtime are now displayed.

Moving on, another quite popular family of requests from the community has been to include application-management features, e.g. options to uninstall or launch an application. Even though I understand why it would make sense to have those, I decided to draw a line and keep Flatseal focused on managing permissions. Well, that was until @Johnn3y suggested to add a show details button, which is a good compromise.

This button will redirect you to the software manager page for the application, where you can launch, update or uninstall the application. For the time being, only GNOME Software is supported since it provides API for doing this, but I am looking forward to add support for others if possible.

As part of this change, I had to reconsider how to display these buttons, so that there would be enough space left in the top header bar in mobile mode. To solve this, Tobias suggested to move these buttons to a separate action bar at the bottom.

Having these buttons down there solves the space problem, and also improves Flatseal ergonomics when used on a phone.

Another small change I managed to land last minute was to rename permissions references. Instead of showing something like features=bluetooth, it will now show allow=bluetooth which is what you would use from flatpak-override or flatpak-run CLI. Thanks to @digitalethics for the suggestion.

Last but not least, special thanks to @eson57, @MiloCasagrande, @AsciiWolf, @ovari, @cho2 and others for keeping an eye on Flatseal and helping me with translations!

So, What’s next?

Well, for the short term I will keep adding support for more overrides requested by the community.

For the longer term though, considering that I now have a better idea of how to model this problem and, that other projects have found Flatseal source code useful to kickstart their permissions managers, I think it would be interesting to consider moving Flatseal backend to an introspectable library, to make things easier for other projects. But, let’s see if there’s interest for that.