diff --git a/flake.nix b/flake.nix index 7bf7cfc..be77519 100644 --- a/flake.nix +++ b/flake.nix @@ -10,9 +10,6 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - # Declarative Flatpak management - nix-flatpak.url = "github:gmodena/nix-flatpak"; - # Optional: Hyprland (if you want a tiling Wayland compositor) # hyprland.url = "github:hyprwm/Hyprland"; @@ -20,7 +17,7 @@ # nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; }; - outputs = { self, nixpkgs, home-manager, nix-flatpak, ... }@inputs: { + outputs = { self, nixpkgs, home-manager, ... }@inputs: { # NixOS configuration for your hostname(s) nixosConfigurations = { # Desktop PC configuration @@ -47,9 +44,6 @@ # User configuration home-manager.users.zeph = import ./home/home.nix; - - # Declarative Flatpak - home-manager.sharedModules = [ nix-flatpak.homeManagerModules.nix-flatpak ]; } ]; }; @@ -78,9 +72,6 @@ # User configuration home-manager.users.zeph = import ./home/home.nix; - - # Declarative Flatpak - home-manager.sharedModules = [ nix-flatpak.homeManagerModules.nix-flatpak ]; } ]; }; diff --git a/home/home.nix b/home/home.nix index 91aadbf..69b4684 100644 --- a/home/home.nix +++ b/home/home.nix @@ -155,17 +155,7 @@ # platformTheme.name = "gtk"; # }; - # Declarative Flatpak packages - services.flatpak = { - packages = [ - "io.github.zen_browser.zen" - # Add more Flatpak apps here - ]; - update.auto = { - enable = true; - onCalendar = "weekly"; - }; - }; + # Flatpaks are managed in system/flatpak.nix # Let Home Manager manage itself programs.home-manager.enable = true; diff --git a/system/common.nix b/system/common.nix index 581a5c1..84ed8fe 100644 --- a/system/common.nix +++ b/system/common.nix @@ -1,6 +1,10 @@ { config, pkgs, ... }: { + imports = [ + ./flatpak.nix + ]; + # Common system configuration shared across all machines # Bootloader @@ -10,9 +14,6 @@ # Networking networking.networkmanager.enable = true; - # Enable Flatpak - services.flatpak.enable = true; - # Timezone and locale time.timeZone = "Europe/London"; i18n.defaultLocale = "en_US.UTF-8"; diff --git a/system/flatpak.nix b/system/flatpak.nix new file mode 100644 index 0000000..3806129 --- /dev/null +++ b/system/flatpak.nix @@ -0,0 +1,47 @@ +{ config, pkgs, ... }: + +let + grep = pkgs.gnugrep; + + # Declare the Flatpaks you want on your system + desiredFlatpaks = [ + "io.github.zen_browser.zen" + # Add more Flatpak apps here + # "com.spotify.Client" + # "com.discordapp.Discord" + ]; +in { + # Enable Flatpak + services.flatpak.enable = true; + + system.userActivationScripts.flatpakManagement = { + text = '' + # Ensure the Flathub repo is added + ${pkgs.flatpak}/bin/flatpak remote-add --if-not-exists flathub \ + https://flathub.org/repo/flathub.flatpakrepo + + # Get currently installed Flatpaks + installedFlatpaks=$(${pkgs.flatpak}/bin/flatpak list --app --columns=application) + + # 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 + + # 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 + + # Remove unused Flatpaks + ${pkgs.flatpak}/bin/flatpak uninstall --unused -y + + # Update all installed Flatpaks + ${pkgs.flatpak}/bin/flatpak update -y + ''; + }; +}