Flatpak: Difference between revisions

imported>Onny
mNo edit summary
Malix (talk | contribs)
m Declarative: add exemples request
 
(33 intermediate revisions by 11 users not shown)
Line 1: Line 1:
[https://www.flatpak.org/ Flatpak] is a linux application sandboxing and distribution framework  
[https://www.flatpak.org/ Flatpak] is a Linux application sandboxing and distribution framework.


== Usage ==
This article extends the documentation in the [https://nixos.org/manual/nixos/stable/#module-services-flatpak NixOS manual].


Using this configuration, <code>flatpak</code> will be installed and ready for use globally for all users:
== Installation ==
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
services.flatpak.enable = true;
</nowiki>}}


If you'd rather make flatpak available on a specific user rather than globally, add <code>flatpak</code> to that user's packages. To be able to install flatpaks graphically, add the <code>gnome.gnome-software</code> package. The result will look something like this:
=== Global ===
Using this configuration, <code>flatpak</code> will be installed and ready to use globally for all users:
{{file|3=services.flatpak.enable = true;|name=/etc/nixos/configuration.nix|lang=nix}}
=== Per-User ===
If you'd rather make Flatpak available to a specific user, add <code>flatpak</code> to that user's packages


{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{{file|3=users.users."user" = {
  users.users.myflatpakuser = {
     packages = with pkgs; [
     packages = with pkgs; [
       flatpak
       flatpak
      gnome.gnome-software
     ];
     ];
   };
   };|name=/etc/nixos/configuration.nix|lang=nix}}
</nowiki>}}


After adding the desired solution to your configuration file, flatpak will be installed, however it is not always added to your path directly, e.g. when you are using sway it will be not.
=== Window Managers / Compositors Patches ===
After adding the desired solution to your configuration file, Flatpak will be installed, but it is not always added to your path directly, e.g. when you are using Sway.


To manually add it to path while using a [https://nixos.wiki/wiki/Greetd greetd] login manager and [https://nixos.wiki/wiki/Sway Sway] create a <code>.profile</code> file with an override for your <code>XDG_DATA_DIRS</code> path, e.g.:
To manually add it to the path while using the [[Greetd]] login manager and [[Sway]], create a <code>.profile</code> file with an override for your <code>XDG_DATA_DIRS</code> path, e.g.:
{{file|.profile|nix|<nowiki>
{{file|3=export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share|name=.profile|lang=}}
export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share
</nowiki>}}
This is also required when installing <code>flatpak</code> on a per-user basis.
This is also required when installing <code>flatpak</code> on a per-user basis.


To start using flatpaks, particularly for flatpak development:
== Usage ==
 
=== Declarative ===
To manage Flatpak declaratively, you can either use [https://github.com/gmodena/nix-flatpak nix-flatpak] or [https://github.com/in-a-dil-emma/declarative-flatpak declarative-flatpak]
 
In the event of a Nix rollback, both modules will reinstall the previously declared Flatpak packages
 
{{Expand|reason=Exemples are missing|scope=section}}
 
==== [https://github.com/gmodena/nix-flatpak nix-flatpak] ====
A convergent approach to Flatpak management where refs are managed in place
 
Flatpak packages are not cached in the Nix store
 
It supports flakes or [[Home Manager|home-manager]], but doesn't support non-flakes only
 
<small>For more details, see [https://github.com/gmodena/nix-flatpak/discussions/168 nix-flatpak/discussions/168]</small>
 
==== [https://github.com/in-a-dil-emma/declarative-flatpak declarative-flatpak] ====
A congruent approach to Flatpak management where changes are designed to be atomic, ensuring that either they succeed or nothing happens. This module uses a temporary installation and then overwrites the current one.
 
It supports non-flake, flakes, and [[Home Manager|home-manager]]
 
<small>For more details, see [https://github.com/in-a-dil-emma/declarative-flatpak/issues/44 declarative-flatpak/issues/44]</small>
 
=== Imperative ===
 
==== Terminal User Interface ====
To manage Flatpak imperatively, you can use [https://docs.flatpak.org/en/latest/using-flatpak.html the <code>flatpak</code> command] ([https://docs.flatpak.org/en/latest/flatpak-command-reference.html <code>flatpak</code> Command Reference Documentation])
 
===== Example =====
<syntaxhighlight lang="console">$ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
$ flatpak update
$ flatpak search Flatseal
$ flatpak install flathub com.github.tchx84.Flatseal
$ flatpak run com.github.tchx84.Flatseal</syntaxhighlight>
 
==== Graphical User Interface ====
To install Flatpaks graphically, you can use [https://apps.gnome.org/en-GB/Software/ the GNOME Software Application] ([https://search.nixos.org/packages?show=gnome-software <code>gnome-software</code> in nixpkgs])
 
<small>'''Note''': installing Flatpaks through it is imperative</small>
 
==== Configure Repositories Globally ====
{{Warning|This assumes you are not installing Flatpak packages [https://wiki.nixos.org/wiki/Flatpak#Declarative declaratively] (using [https://wiki.nixos.org/wiki/Flatpak#nix-flatpak nix-flatpak] or [https://wiki.nixos.org/wiki/Flatpak#declarative-flatpak declarative-flatpak])
 
Otherwise, the following section could conflict with them


<syntaxHighlight>
If you are, prefer using [https://wiki.nixos.org/wiki/Flatpak#nix-flatpak nix-flatpak]'s <code>services.flatpak.remotes</code> or [https://wiki.nixos.org/wiki/Flatpak#declarative-flatpak declarative-flatpak]'s <code>services.flatpak.remotes</code> instead}}
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
To automatically configure Flatpak repositories for all users, one can add this snippet to <code>configuration.nix</code>:{{file|3=systemd.services.flatpak-repo = {
flatpak update
    wantedBy = [ "multi-user.target" ];
flatpak search bustle
    path = [ pkgs.flatpak ];
flatpak install flathub org.freedesktop.Bustle
    script = ''
flatpak run org.freedesktop.Bustle
      flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
</syntaxHighlight>
    '';
  };|name=/etc/nixos/configuration.nix|lang=nix}}


== Development ==
== Development ==


=== Build Flatpak project ===
=== Build a Flatpak project ===
 
The following example builds a demo app of the [https://github.com/GNOME/libadwaita libadwaita] repository using <code>flatpak-builder</code>, installs it locally in the user space and runs it. First install <code>flatpak</code> and <code>flatpak-builder</code> on your system
 
{{file|3=services.flatpak.enable = true;
environment.systemPackages = [
  pkgs.flatpak-builder
];|name=/etc/nixos/configuration.nix|lang=nix}}
 
Clone, build and run the example project.


The following example builds a demo project of the [https://gitlab.gnome.org/GNOME/libhandy libhandy] repository using <code>flatpak-builder</code>, installs it locally in the user space and run it. First install <code>flatpak</code> and <code>flatpak-builder</code> on your system
<syntaxhighlight lang="console">$ flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
$ flatpak install gnome-nightly org.gnome.Sdk org.gnome.Platform
$ git clone https://gitlab.gnome.org/GNOME/libadwaita.git
$ cd libadwaita
$ nix shell nixpkgs#appstream
$ flatpak-builder --disable-tests --user --install build demo/org.gnome.Adwaita1.Demo.json
$ flatpak run org.gnome.Adwaita1.Demo.json</syntaxhighlight>


{{file|/etc/nixos/configuration.nix|nix|<nowiki>
Note that the <code>gnome-nightly</code> repository and the <code>appstream</code> dependency are especially required for this specific project and might be different for other Flatpak projects.
services.flatpak.enable = true;
environment.systemPackages = [ pkgs.flatpak-builder ];
</nowiki>}}


Clone, build and run the example project. As for now [https://gitlab.gnome.org/GNOME/libhandy/-/merge_requests/844 a patch] for libhandy might be required to fix a bug in the build process.
== Tips and tricks ==


<syntaxHighlight>
=== Emulate Flatpaks of different architecture ===
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatp
It is possible to install and run Flatpaks which were compiled for a different platform.
akrepo
 
flatpak install org.gnome.Sdk/x86_64/master org.gnome.Platform/x86_64/master
In this example we imperatively install the application "Metronome" <code>aarch64</code> Flatpak package and run it (regardless of the architecture of the host, but in that case, it was <code>x86_64</code>):<syntaxhighlight lang="console">$ flatpak install flathub com.adrienplazas.Metronome --arch=aarch64
git clone https://gitlab.gnome.org/GNOME/libhandy.git
$ flatpak run com.adrienplazas.Metronome</syntaxhighlight>To support emulation with Qemu, [[QEMU#Run binaries of different architecture|following Binfmt configuration]] is required.
cd libhandy
flatpak-builder --user --install _flatpak examples/sm.puri.Handy.Demo.json
flatpak run sm.puri.Handy.Demo
</syntaxHighlight>


== Troubleshooting ==
== Troubleshooting ==
Line 64: Line 115:
=== Missing themes and cursors ===
=== Missing themes and cursors ===


If you have issues with cursors or themes in general, take a look at [https://nixos.wiki/wiki/Fonts#Flatpak_applications_can.27t_find_system_fonts Fonts]
If you have issues with cursors or themes in general, take a look at [[Fonts#Flatpak_applications_can't_find_system_fonts]]
 
[[Category:Software]]
[[Category:NixOS Manual]]