Update flatpak.nix
This commit is contained in:
79
flatpak.nix
79
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"];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user