/ applications / flatpak.nix
flatpak.nix
 1  { config, lib, pkgs, ... }:
 2  let
 3    # We point directly to 'gnugrep' instead of 'grep'
 4    grep = pkgs.gnugrep;
 5    # 1. Declare the Flatpaks you *want* on your system
 6    desiredFlatpaks = [
 7      "com.github.tchx84.Flatseal"
 8      "dev.vencord.Vesktop"
 9      "org.telegram.desktop"
10      "io.beekeeperstudio.Studio"
11      "com.parsecgaming.parsec"
12      "md.obsidian.Obsidian"
13      "com.spotify.Client"
14      # "com.ktechpit.whatsie"
15      "io.github.tobagin.karere"
16      "com.moonlight_stream.Moonlight"
17    ];
18  in
19  {
20    home.packages = [ pkgs.flatpak ];
21    home.activation.flatpakManagement =
22      lib.hm.dag.entryAfter [ "writeBoundary" ] ''
23        # 2. Ensure the Flathub repo is added
24        ${pkgs.flatpak}/bin/flatpak remote-add --if-not-exists flathub \
25          https://flathub.org/repo/flathub.flatpakrepo
26  
27        # 3. Get currently installed Flatpaks
28        installedFlatpaks=$(${pkgs.flatpak}/bin/flatpak list --app --columns=application)
29  
30        # 4. Remove any Flatpaks that are NOT in the desired list
31        for installed in $installedFlatpaks; do
32          if ! echo ${
33            toString desiredFlatpaks
34          } | ${grep}/bin/grep -q $installed; then
35            echo "Removing $installed because it's not in the desiredFlatpaks list."
36            ${pkgs.flatpak}/bin/flatpak uninstall -y --noninteractive $installed
37          fi
38        done
39  
40        # 5. Install or re-install the Flatpaks you DO want
41        for app in ${toString desiredFlatpaks}; do
42          echo "Ensuring $app is installed."
43          ${pkgs.flatpak}/bin/flatpak install -y flathub $app
44        done
45  
46        # 6. Remove unused Flatpaks
47        ${pkgs.flatpak}/bin/flatpak uninstall --unused -y
48  
49        # 7. Update all installed Flatpaks
50        ${pkgs.flatpak}/bin/flatpak update -y
51      '';
52  
53  }