particle-os-modules/modules/default-flatpaks
fiftydinar ec020cd2ca
fix(default-flatpaks): Missing notification for system flatpaks (#87)
* fix:(default-flatpaks): Missing notification for system flatpaks

This approach, while more fragmented, it's cleaner, as there is a clearer separation of root & non-root operations done by flatpak-setup service. This should probably increase security too (but I'm not the expert to talk seriously about that). It also gets rid of some non-harming error for /var data, can't remember it fully.

While it may be confusing for users that they have to type:

`systemctl status --user system-flatpak-setup`

instead of previous:

`systemctl status system-flatpak-setup`

It is something worth sacrificing for the important user-experience fix.
2023-12-27 09:12:49 +00:00
..
default-flatpaks.sh fix(default-flatpaks): Missing notification for system flatpaks (#87) 2023-12-27 09:12:49 +00:00
README.md fix(default-flatpaks): Missing notification for system flatpaks (#87) 2023-12-27 09:12:49 +00:00

default-flatpaks module for startingpoint

The default-flatpaks module can be used to install or uninstall flatpaks from a configurable remote on every boot. It skips that operation if no changes are detected. This module first removes the Fedora Flatpaks remote and Flatpaks that come pre-installed in Fedora. A Flatpak remote is configured the first time the module is used, but it can be re-configured in subsequent usages of the module. If no Flatpak remote is specified, the module will default to using Flathub.

Flatpaks can either be installed system-wide or per-user, though per-user flatpaks will be installed for every user on a system. Previously-installed flatpaks can also be removed.

The module uses the following scripts to handle flatpak setup:

  • /usr/bin/system-flatpak-presetup
  • /usr/bin/system-flatpak-setup
  • /usr/bin/user-flatpak-setup

The scripts are run on every boot by these services:

  • /usr/lib/systemd/system/system-flatpak-presetup.service
  • /usr/lib/systemd/system/system-flatpak-setup.service
  • /usr/lib/systemd/user/user-flatpak-setup-service

system-flatpak-presetup uninstalls Fedora flatpaks & replaces Fedora repos with your system repos (needs root, hence why it's presetup). system-flatpak-setup checks the flatpak install/remove lists created by the module & performs the install/uninstall operation according to that. user-flatpak-setup functions the same for user flatpaks, with additional "user" replacement repo operation.

This module stores the Flatpak remote configuration and Flatpak install/remove lists in /etc/flatpak/. There are two subdirectories, user and system corresponding with the install level of the Flatpaks and repositories. Each directory has text files containing the IDs of flatpaks to install and remove, plus a repo-info.yml containing the details of the Flatpak repository.

This module also supports disabling & enabling notifications.

Example configurations

type: default-flatpaks
notify: true   # Send notification after install/uninstall is finished (true/false)
system:
  # If no repo information is specified, Flathub will be used by default
  repo-url: https://dl.flathub.org/repo/flathub.flatpakrepo
  repo-name: flathub
  repo-title: "Flathub (system-wide)" # Optional; this sets the remote's user-facing name in graphical frontends like GNOME Software
  install:
    - org.gnome.Loupe
    - org.winehq.Wine//stable-23.08 # This is an example of flatpak which has multiple versions in selection (flatpak//version)
  remove:
    - org.gnome.eog
# A flatpak repo can also be added without having to install flatpaks,
# as long as one of the repo- fields is present
user:
  repo-name: flathub
# Assuming that the above example is called first in a recipe,
# a subsequent usage might look like this:
type: default-flatpaks
system:
  # If the repo-* fields are omitted, the configured repo will
  # use the previous configuration. Otherwise, it defaults to Flathub.
  install:
    - org.kde.kdenlive
user:
  # repo-name will overwrite the previously-configured repo-name for the user remote
  repo-name: flathub-user
  repo-title: "Flathub (User)