diff --git a/flatpak.nix b/flatpak.nix index 0e27c62..1c1ab50 100644 --- a/flatpak.nix +++ b/flatpak.nix @@ -1,39 +1,56 @@ -{ config, pkgs, ... }: +{ config, pkgs, lib, ... }: + let - # We point directly to 'gnugrep' instead of 'grep' - grep = pkgs.gnugrep; - # 1. Declare the Flatpaks you *want* on your system - desiredFlatpaks = []; -in { - system.userActivationScripts.flatpakManagement = { - text = '' - # 2. Ensure the Flathub repo is added - ${pkgs.flatpak}/bin/flatpak remote-add --if-not-exists flathub \ - https://flathub.org/repo/flathub.flatpakrepo + desiredFlatpaks = [ + "org.mozilla.firefox" + "org.mozilla.thunderbird" + ]; + flatpakScript = pkgs.writeScript "nix-flatpak-management" '' + #!${pkgs.runtimeShell} -e + ${pkgs.flatpak}/bin/flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo - # 3. Get currently installed Flatpaks - installedFlatpaks=$(${pkgs.flatpak}/bin/flatpak list --app --columns=application) + # Get currently installed Flatpaks + installedFlatpaks=$(${pkgs.flatpak}/bin/flatpak list --app --columns=application) - # We allow users to install flatpaks on their own, so this part is not active. - # 4. Remove any Flatpaks that are NOT in the desired list - # for installed in $installedFlatpaks; do - # if ! echo ${toString desiredFlatpaks} | ${grep}/bin/grep -q $installed; then - # echo "Removing $installed because it's not in the desiredFlatpaks list." - # ${pkgs.flatpak}/bin/flatpak uninstall -y --noninteractive $installed - # fi - # done + # Users can decide what flatpaks they want to install so this is disabled + # Remove Flatpaks not in the desired list + # for installed in $installedFlatpaks; do + # if ! echo ${lib.concatStringsSep " " desiredFlatpaks} | grep -q "$installed"; then + # echo "Removing $installed because it's not in the desiredFlatpaks list." + # ${pkgs.flatpak}/bin/flatpak uninstall -y --noninteractive "$installed" + # fi + # done - # 5. Install or re-install the Flatpaks you DO want - for app in ${toString desiredFlatpaks}; do - echo "Ensuring $app is installed." - ${pkgs.flatpak}/bin/flatpak install -y flathub $app - done + # Install or re-install desired Flatpaks + for app in ${lib.concatStringsSep " " desiredFlatpaks}; do + echo "Ensuring $app is installed." + ${pkgs.flatpak}/bin/flatpak install -y --noninteractive flathub "$app" + done - # 6. Remove unused Flatpaks - ${pkgs.flatpak}/bin/flatpak uninstall --unused -y + # Remove unused Flatpaks + ${pkgs.flatpak}/bin/flatpak uninstall --unused -y --noninteractive - # 7. Update all installed Flatpaks - ${pkgs.flatpak}/bin/flatpak update -y - ''; + # Update all installed Flatpaks + ${pkgs.flatpak}/bin/flatpak update -y --noninteractive + ''; +in +{ + systemd.services.nix-flatpak-management = { + description = "Manage Flatpak installations"; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = "yes"; + ExecStart = "${flatpakScript}"; + }; + wantedBy = ["multi-user.target"]; + }; + + systemd.timers.nix-flatpak-management = { + description = "Run flatpak management periodically"; + timerConfig = { + OnCalendar = "daily"; + Persistent = "true"; + }; + wantedBy = ["timers.target"]; }; } \ No newline at end of file