Flatpak: Difference between revisions
→Declaratively: feature a comparison |
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]. | ||
== | == Installation == | ||
=== Global | === 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}} | {{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 | |||
=== Per-User | |||
If you'd rather make Flatpak available to a specific user, add <code>flatpak</code> to that user's packages | |||
{{file|3=users.users."user" = { | {{file|3=users.users."user" = { | ||
packages = with pkgs; [ | packages = with pkgs; [ | ||
flatpak | flatpak | ||
]; | ]; | ||
};|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. | ||
=== | == 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> | ||
To | |||
==== [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 | It is possible to install and run Flatpaks which were compiled for a different platform. | ||
$ flatpak install | |||
$ flatpak run | 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 == |