Flatpak: Difference between revisions

Malix (talk | contribs)
Featuring declarative installation methods, general fixes and enhancement, featuring headers
Minion (talk | contribs)
feat: add directories to persist with impermanence
 
(17 intermediate revisions by one other 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 ===
=== With Impermanence ===
If you're using [[Impermanence]], you'll need to make sure you persist the directories that flatpak will be using
 
* <code>/var/lib/flatpak</code> (for system configuration, repositories, etc.)
* <code>~/.var/app</code> (for app data)
* <code>~/.local/share/flatpak</code> (for user-specific configuration)
 
The directories in your home (starting with <code>~</code>) will need to be persisted for every user who will use flatpak
 
== 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


==== Declaratively ====
<small>For more details, see [https://github.com/gmodena/nix-flatpak/discussions/168 nix-flatpak/discussions/168]</small>
To install flatpak packages declaratively, you can use [https://github.com/gmodena/nix-flatpak nix-flatpak] (inspired by [https://github.com/in-a-dil-emma/declarative-flatpak declarative-flatpak])


==== Imperatively ====
==== [https://github.com/in-a-dil-emma/declarative-flatpak declarative-flatpak] ====
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])
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 46: Line 69:
$ 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 73: Line 115:


=== 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 ==