{ lib
, config
, pkgs
, foodogsquaredLib
, foodogsquaredUtils
, foodogsquaredModulesPath

, ... }:

# Since this will be exported as an installer ISO, you'll have to keep in mind
# about the added imports from nixos-generators. In this case, it simply adds
# the NixOS installation CD profile.
{
  imports = [
    "${foodogsquaredModulesPath}/profiles/installer.nix"

    (foodogsquaredUtils.mapHomeManagerUser "nixos" { })
  ];

  config = lib.mkMerge [
    {
      # Use the systemd-boot EFI boot loader.
      boot.loader.systemd-boot = {
        enable = true;
        netbootxyz.enable = true;
      };
      boot.loader.efi.canTouchEfiVariables = true;
      boot.kernelPackages = pkgs.linuxPackages_6_6;

      # We'll make NetworkManager manage all of them networks.
      networking.wireless.enable = false;

      # Use my desktop environment configuration without the apps just to make the
      # closure size smaller.
      workflows = {
        enable = [ "a-happy-gnome" ];
        workflows.a-happy-gnome = {
          extraApps = lib.mkForce [ ];
        };
      };

      # Install the web browser of course. What would be a graphical installer
      # without one, yes?
      programs.firefox = {
        enable = true;
        package = pkgs.firefox-foodogsquared-guest;
      };

      # Some niceties.
      suites.desktop.enable = true;

      services.xserver.displayManager = {
        gdm = {
          enable = true;
          autoSuspend = false;
        };
        autoLogin = {
          enable = true;
          user = "nixos";
        };
      };

      system.stateVersion = "23.11";
    }

    (lib.mkIf
      (foodogsquaredLib.nixos.isFormat config "isoImage") {
      isoImage = {
        isoBaseName = config.networking.hostName;
        edition = "a-happy-gnome";

        squashfsCompression = "zstd -Xcompression-level 12";
      };
    })
  ];
}