Flatpak: Difference between revisions

Malix (talk | contribs)
Declaratively: feature a comparison
Malix (talk | contribs)
m Declarative: add exemples request
 
(15 intermediate revisions by the same user not shown)
Line 3: Line 3:
This article extends the documentation in the [https://nixos.org/manual/nixos/stable/#module-services-flatpak NixOS manual].
This article extends the documentation in the [https://nixos.org/manual/nixos/stable/#module-services-flatpak NixOS manual].


== Usage ==
== Installation ==


=== Global Installation ===
=== Global ===
Using this configuration, <code>flatpak</code> will be installed and ready to use globally for all users:
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}}To automatically configure a flatpak repository for all users using the global configuration file, add this to your <code>configuration.nix</code> file:{{file|3=systemd.services.flatpak-repo = {
{{file|3=services.flatpak.enable = true;|name=/etc/nixos/configuration.nix|lang=nix}}
    wantedBy = [ "multi-user.target" ];
=== Per-User ===
    path = [ pkgs.flatpak ];
If you'd rather make Flatpak available to a specific user, add <code>flatpak</code> to that user's packages
    script = ''
      flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
    '';
  };|name=/etc/nixos/configuration.nix|lang=nix}}
 
=== Per-User Installation ===
If you'd rather make Flatpak available to a specific user, add <code>flatpak</code> to that user's packages. To be able to install Flatpaks graphically, add the <code>gnome-software</code> package. The result will look something like this:


{{file|3=users.users."user" = {
{{file|3=users.users."user" = {
     packages = with pkgs; [
     packages = with pkgs; [
       flatpak
       flatpak
      gnome-software
     ];
     ];
   };|name=/etc/nixos/configuration.nix|lang=nix}}
   };|name=/etc/nixos/configuration.nix|lang=nix}}
Line 32: Line 24:
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.


=== Flatpak Package Installation ===
== 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]


==== Declaratively ====
In the event of a Nix rollback, both modules will reinstall the previously declared Flatpak packages
To install flatpak packages 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]


===== [https://github.com/gmodena/nix-flatpak nix-flatpak] =====
{{Expand|reason=Exemples are missing|scope=section}}
A convergent approach in which Flatpak packages manage their own lifecycle independently of Nix generations (Nix rollbacks wouldn't revert Flatpak packages to their previous state)


As Flatpak packages are not cached in Nix store, it uses more network bandwidth but is more efficient with disk storage
==== [https://github.com/gmodena/nix-flatpak nix-flatpak] ====
A convergent approach to Flatpak management where refs are managed in place


===== [https://github.com/in-a-dil-emma/declarative-flatpak declarative-flatpak] =====
Flatpak packages are not cached in the Nix store
A congruent (truly declarative and reproducible) approach in which Flatpak packages are integrated into the Nix reproducible model, meaning they become part of Nix's generations (Nix rollbacks would revert Flatpak packages to their previous state)


As Flatpak packages are cached in Nix store, it is more efficient with disk storage but uses less network bandwidth
It supports flakes or [[Home Manager|home-manager]], but doesn't support non-flakes only


==== Imperatively ====
<small>For more details, see [https://github.com/gmodena/nix-flatpak/discussions/168 nix-flatpak/discussions/168]</small>
To install flatpak packages imperatively and use them, you can use [https://docs.flatpak.org/en/latest/using-flatpak.html the <code>flatpak</code> CLI] ([https://docs.flatpak.org/en/latest/flatpak-command-reference.html <code>flatpak</code> CLI Reference Documentation])
 
==== [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 =====
===== Example =====
Line 56: Line 60:
$ flatpak install flathub com.github.tchx84.Flatseal
$ flatpak install flathub com.github.tchx84.Flatseal
$ flatpak run com.github.tchx84.Flatseal</syntaxhighlight>
$ 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
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}}
To automatically configure Flatpak repositories for all users, one can add this snippet to <code>configuration.nix</code>:{{file|3=systemd.services.flatpak-repo = {
    wantedBy = [ "multi-user.target" ];
    path = [ pkgs.flatpak ];
    script = ''
      flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
    '';
  };|name=/etc/nixos/configuration.nix|lang=nix}}


== Development ==
== Development ==
Line 83: Line 106:


=== Emulate Flatpaks of different architecture ===
=== Emulate Flatpaks of different architecture ===
It is possible to install and run Flatpaks which were compiled for a different platform. In this example we start the application ''Metronome'' as aarch64 Flatpak on a x86_64 host:<syntaxhighlight lang="console">
It is possible to install and run Flatpaks which were compiled for a different platform.
$ flatpak install --user --arch=aarch64 flathub com.adrienplazas.Metronome
 
$ flatpak run --user com.adrienplazas.Metronome
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
</syntaxhighlight>To support emulation with Qemu, [[QEMU#Run binaries of different architecture|following Binfmt configuration]] is required.
$ flatpak run com.adrienplazas.Metronome</syntaxhighlight>To support emulation with Qemu, [[QEMU#Run binaries of different architecture|following Binfmt configuration]] is required.


== Troubleshooting ==
== Troubleshooting ==