{
  lib,
  config,
  options,
  pkgs,
  ...
}:
{
  options.mods.flatpak = {
    enable = lib.mkOption {
      default = true;
      example = false;
      type = lib.types.bool;
      description = "Enables the flatpak package manager";
    };
    additional_packages = lib.mkOption {
      default = [ ];
      example = [ ];
      type = with lib.types; listOf str;
      description = "Flatpak packages";
    };
  };
  config = lib.mkIf config.mods.flatpak.enable (
    lib.optionalAttrs (options ? services.flatpak.remote) {
      environment.systemPackages = [ pkgs.flatpak ];
      services.flatpak.remotes = lib.mkOptionDefault [
        {
          name = "flathub-stable";
          location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
        }
      ];
      services.flatpak.uninstallUnmanaged = true;
    }
    // lib.optionalAttrs (options ? services.flatpak.packages) {
      services.flatpak.packages = [
        # fallback if necessary, but generally avoided as nix is superior :)
        # default flatseal installation since flatpak permissions are totally not a broken idea 
        "com.github.tchx84.Flatseal"
      ] ++ config.mods.flatpak.additional_packages;
    }
  );
}
