/ 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 }