Files
nixos-production/flatpak-management.nix
2025-12-27 21:23:03 +00:00

84 lines
2.6 KiB
Nix

{ config, pkgs, lib, ... }:
let
desiredFlatpaks = [
# Example
# "org.mozilla.firefox"
];
flatpakScript = pkgs.writeScript "nix-flatpak-management" ''
#!${pkgs.runtimeShell} -e
${pkgs.flatpak}/bin/flatpak remote-add \
--if-not-exists flathub \
https://dl.flathub.org/repo/flathub.flatpakrepo
# Get currently installed Flatpaks
installedFlatpaks=$(${pkgs.flatpak}/bin/flatpak list --app --columns=application)
# 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
# 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
# Hardcoded Threema install because the beta is not on Flathub yet
if ${pkgs.flatpak}/bin/flatpak info ch.threema.threema-desktop >/dev/null 2>&1; then
echo "Threema Desktop is already installed"
else
echo "Installing Threema Desktop..."
${pkgs.flatpak}/bin/flatpak install -y --from https://releases.threema.ch/flatpak/threema-desktop/ch.threema.threema-desktop.flatpakref --noninteractive
fi
# Remove unused Flatpaks
${pkgs.flatpak}/bin/flatpak uninstall --unused -y --noninteractive
# Update all installed Flatpaks
${pkgs.flatpak}/bin/flatpak update -y --noninteractive
'';
in
{
############################################################
# Flatpak Management Service
############################################################
systemd.services.nix-flatpak-management = {
description = "Manage Flatpak installations";
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = "yes";
ExecStart = "${flatpakScript}";
};
wantedBy = [ "multi-user.target" ];
};
############################################################
# Flatpak Management Timer
############################################################
systemd.timers.nix-flatpak-management = {
description = "Run flatpak management periodically";
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "2min";
OnUnitActiveSec = "5min";
Persistent = true;
};
};
}