{ lib, ... }:
let inherit (lib) mkOption types;
in {
  imports = [
    ./hardware.nix
    ./i18n.nix
    ./os.nix
    ./partition.nix
    ./programs.nix
    ./software.nix
    ./users.nix
    ./windows.nix
  ];

  options = {
    valhalla = {
      boot = {
        efiMountPoint = mkOption {
          type = types.str;
          description = "The mountpoint of the efi partition.";
          default = "/boot";
        };

        label = mkOption {
          type = types.str;
          description = "The label of the boot entry.";
          default = "OS";
        };
      };

      hostname = mkOption {
        type = types.str;
        description = "The hostname of the system.";
        default = "valhalla";
      };

      setupUser = {
        name = mkOption {
          type = types.str;
          description = "The name of the user used to set up the system.";
          default = "heimdall";
        };

        id = mkOption {
          type = types.int;
          description = "The UID of the user used to set up the system.";
          default = 420;
        };
      };

      timeZone = mkOption {
        type = types.nullOr types.str;
        description = "The time zone of the system.";
        default = null;
      };

      keyMap = mkOption {
        type = types.nullOr types.str;
        description = "The console key map of the system.";
        default = null;
      };

      keyboardLayout = mkOption {
        type = types.nullOr types.str;
        description = "The X11 keyboard layout of the system.";
        default = null;
      };

      hidpi = mkOption {
        type = types.bool;
        description = "A value indicating whether the screen is hidpi.";
        default = false;
      };
    };
  };
}