Flatpak: Difference between revisions
→Declaratively: feature a comparison |
→Declaratively: fix, see https://github.com/in-a-dil-emma/declarative-flatpak/issues/44 |
||
Line 38: | Line 38: | ||
===== [https://github.com/gmodena/nix-flatpak nix-flatpak] ===== | ===== [https://github.com/gmodena/nix-flatpak nix-flatpak] ===== | ||
A convergent approach | A '''convergent approach''' where Flatpak packages manage their own lifecycle independently of Nix generations. It manages refs in place. Since Flatpak packages are '''not cached in the Nix store''', this approach uses '''more network bandwidth''' but is more '''efficient with disk storage'''. Note that it '''requires flakes''' to function. | ||
===== [https://github.com/in-a-dil-emma/declarative-flatpak declarative-flatpak] ===== | ===== [https://github.com/in-a-dil-emma/declarative-flatpak declarative-flatpak] ===== | ||
A congruent (truly declarative and reproducible) approach | A '''congruent (truly declarative and reproducible) approach''' where Flatpak packages are integrated into the Nix reproducible model, meaning they become part of Nix's generations. Changes are '''atomic''', ensuring that either the new files are installed successfully or nothing happens. This module uses a temporary installation and then overwrites the current one. This module does '''not yet cache Flatpak refs in the Nix store''', so it uses '''more network bandwidth''' but is more '''efficient with disk storage'''. Note that it '''supports non-flake installs'''. | ||
==== Imperatively ==== | ==== Imperatively ==== |
Revision as of 18:14, 7 August 2025
Flatpak is a Linux application sandboxing and distribution framework.
This article extends the documentation in the NixOS manual.
Usage
Global Installation
Using this configuration, flatpak
will be installed and ready to use globally for all users:
services.flatpak.enable = true;
To automatically configure a flatpak repository for all users using the global configuration file, add this to your configuration.nix
file:
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
'';
};
Per-User Installation
If you'd rather make Flatpak available to a specific user, add flatpak
to that user's packages. To be able to install Flatpaks graphically, add the gnome-software
package. The result will look something like this:
users.users."user" = {
packages = with pkgs; [
flatpak
gnome-software
];
};
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 the path while using the Greetd login manager and Sway, create a .profile
file with an override for your XDG_DATA_DIRS
path, e.g.:
export XDG_DATA_DIRS=$XDG_DATA_DIRS:/usr/share:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share
This is also required when installing flatpak
on a per-user basis.
Flatpak Package Installation
Declaratively
To install flatpak packages declaratively, you can either use nix-flatpak or declarative-flatpak
A convergent approach where Flatpak packages manage their own lifecycle independently of Nix generations. It manages refs in place. Since Flatpak packages are not cached in the Nix store, this approach uses more network bandwidth but is more efficient with disk storage. Note that it requires flakes to function.
A congruent (truly declarative and reproducible) approach where Flatpak packages are integrated into the Nix reproducible model, meaning they become part of Nix's generations. Changes are atomic, ensuring that either the new files are installed successfully or nothing happens. This module uses a temporary installation and then overwrites the current one. This module does not yet cache Flatpak refs in the Nix store, so it uses more network bandwidth but is more efficient with disk storage. Note that it supports non-flake installs.
Imperatively
To install flatpak packages imperatively and use them, you can use the flatpak
CLI (flatpak
CLI Reference Documentation)
Example
$ 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
Development
Build a Flatpak project
The following example builds a demo app of the libadwaita repository using flatpak-builder
, installs it locally in the user space and runs it. First install flatpak
and flatpak-builder
on your system
services.flatpak.enable = true;
environment.systemPackages = [
pkgs.flatpak-builder
];
Clone, build and run the example project.
$ 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
Note that the gnome-nightly
repository and the appstream
dependency are especially required for this specific project and might be different for other Flatpak projects.
Tips and tricks
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:
$ flatpak install --user --arch=aarch64 flathub com.adrienplazas.Metronome
$ flatpak run --user com.adrienplazas.Metronome
To support emulation with Qemu, following Binfmt configuration is required.
Troubleshooting
Missing themes and cursors
If you have issues with cursors or themes in general, take a look at Fonts#Flatpak_applications_can't_find_system_fonts