Files
2026-02-22 19:25:39 +01:00

82 lines
2.7 KiB
Nix

{ config, pkgs, lib, ... }:
let
# Adjust this path if your module lives elsewhere in the repo
flatpakConfPath = ../assets/conf/apps/flatpak.conf;
# Parse flatpak.conf: ignore empty lines and comments
flatpakApps =
let
lines = lib.splitString "\n" (builtins.readFile flatpakConfPath);
cleaned = map (l: lib.strings.trim l) lines;
in
builtins.filter (l: l != "" && !(lib.hasPrefix "#" l)) cleaned;
# Shell script that:
# - adds Flathub if missing
# - installs missing apps
# - (optional) removes apps not in the list
syncFlatpaks = pkgs.writeShellScript "sync-flatpaks" ''
set -euo pipefail
# Ensure Flathub remote exists (system-wide)
if ! flatpak remotes --system --columns=name | grep -qx flathub; then
flatpak remote-add --system --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
fi
desired_apps=(
${lib.concatStringsSep "\n" (map (a: ''"${a}"'') flatpakApps)}
)
# Install desired apps if missing
for app in "''${desired_apps[@]}"; do
if ! flatpak info --system "$app" >/dev/null 2>&1; then
flatpak install --system -y --noninteractive flathub "$app"
fi
done
# OPTIONAL: remove system apps not listed (uncomment to enforce strictly)
# installed="$(flatpak list --system --app --columns=application | sed '/^$/d')"
# for app in $installed; do
# keep=0
# for want in "''${desired_apps[@]}"; do
# if [ "$app" = "$want" ]; then keep=1; break; fi
# done
# if [ "$keep" -eq 0 ]; then
# flatpak uninstall --system -y --noninteractive "$app" || true
# fi
# done
'';
in
{
# Native NixOS Flatpak support
services.flatpak.enable = true; # enables Flatpak on NixOS :contentReference[oaicite:1]{index=1}
# Strongly recommended for Flatpak desktop integration
# (Adjust portals to your DE/WM if you want, this is a safe default.)
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
};
# Ensure the config file is present on the system (optional but convenient)
environment.etc."flatpak/flatpak.conf".source = flatpakConfPath;
# Run sync after boot and after rebuilds, once networking is up
systemd.services.flatpak-sync = {
description = "Install Flatpak apps listed in flatpak.conf";
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = syncFlatpaks;
};
# Re-run when the config changes (best-effort)
restartTriggers = [ flatpakConfPath ];
path = [ pkgs.flatpak pkgs.coreutils pkgs.gnugrep pkgs.gnused ];
};
}