{ self, lib, ... }: {
  flake.nixosModules.systemLocalization = {
    config,
    ...
  }:
  let
    cfg = config.chiasson.system.localization;
  in
  {
    options.chiasson.system.localization = {
      timeZone = lib.mkOption {
        type = lib.types.str;
        default = "America/Moncton";
        description = "Default system timezone.";
      };
      defaultLocale = lib.mkOption {
        type = lib.types.str;
        default = "en_CA.UTF-8";
        description = "Default system locale.";
      };
      xkb = {
        layout = lib.mkOption {
          type = lib.types.str;
          default = "ca";
          description = "Default XKB layout.";
        };
        variant = lib.mkOption {
          type = lib.types.str;
          default = "";
          description = "Default XKB variant.";
        };
      };
      consoleKeyMap = lib.mkOption {
        type = lib.types.str;
        default = "cf";
        description = "Default Linux console keymap.";
      };
    };

    config = {
      time.timeZone = lib.mkDefault cfg.timeZone;
      i18n.defaultLocale = lib.mkDefault cfg.defaultLocale;
      services.xserver.xkb.layout = lib.mkDefault cfg.xkb.layout;
      services.xserver.xkb.variant = lib.mkDefault cfg.xkb.variant;
      console.keyMap = lib.mkDefault cfg.consoleKeyMap;
    };
  };
}
