{
  config,
  lib,
  pkgs,
  profiles,
  ...
}:
with lib; let
  # Gets hostname of host to be bundled inside iso
  # Copied from https://github.com/divnix/digga/blob/30ffa0b02272dc56c94fd3c7d8a5a0f07ca197bf/modules/bootstrap-iso.nix#L3-L11
  getFqdn = config: let
    net = config.networking;
    fqdn =
      if (net ? domain) && (net.domain != null)
      then "${net.hostName}.${net.domain}"
      else net.hostName;
  in
    fqdn;
in {
  # build with: `nix build ".#nixosConfigurations.bootstrap.config.system.build.isoImage"`
  imports = [
    # profiles.networking
    profiles.users.root # make sure to configure ssh keys
    profiles.users.pub-solar
    profiles.base-user
    profiles.graphical
    profiles.pub-solar-iso
  ];

  config = {
    boot.loader.systemd-boot.enable = true;

    # will be overridden by the bootstrapIso instrumentation
    fileSystems."/" = {device = "/dev/disk/by-label/nixos";};

    system.nixos.label = "PubSolarOS-" + config.system.nixos.version;

    # mkForce because a similar transformation gets double applied otherwise
    # https://github.com/divnix/digga/blob/30ffa0b02272dc56c94fd3c7d8a5a0f07ca197bf/modules/bootstrap-iso.nix#L17
    # https://github.com/NixOS/nixpkgs/blob/aecd4d8349b94f9bd5718c74a5b789f233f67326/nixos/modules/installer/cd-dvd/installation-cd-base.nix#L21-L22
    isoImage = {
      isoBaseName = mkForce (getFqdn config);
      isoName = mkForce "${config.system.nixos.label}-${config.isoImage.isoBaseName}-${pkgs.stdenv.hostPlatform.system}.iso";
    };

    # This value determines the NixOS release from which the default
    # settings for stateful data, like file locations and database versions
    # on your system were taken. It‘s perfectly fine and recommended to leave
    # this value at the release version of the first install of this system.
    # Before changing this value read the documentation for this option
    # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
    system.stateVersion = "21.05"; # Did you read the comment?
  };
}