76 lines
2.4 KiB
Nix
76 lines
2.4 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
let
|
|
desiredFlatpaks = [];
|
|
|
|
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
|
|
${pkgs.flatpak}/bin/flatpak install -y --from https://releases.threema.ch/flatpak/threema-desktop/ch.threema.threema-desktop.flatpakref --noninteractive
|
|
|
|
# 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;
|
|
};
|
|
};
|
|
} |