{ config, inputs, pkgs, lib, ... }:

{
  options = {
    user.name = lib.mkOption { default = "pan"; };
    user.timezone = lib.mkOption { default = "America/Los_Angeles"; };
    system.extraFonts = lib.mkOption { default = []; };
    system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system";
  };

  config = {
    # Use the systemd-boot EFI boot loader.
    boot.kernelPackages = pkgs.linuxPackages_latest;
    boot.loader.systemd-boot.enable = true;
    boot.loader.timeout = 1;
    boot.loader.efi.canTouchEfiVariables = true;

    time.timeZone = config.user.timezone;

    i18n.defaultLocale = "en_US.UTF-8";

    # "Essential" Packages
    environment.systemPackages = with pkgs; [
      git
      neovim
      nnn
      xdg-user-dirs
    ];

    # XDG Compliance
    xdg.portal.config.common.default = "*";
    environment.sessionVariables = rec {
      XDG_CONFIG_HOME = "\${HOME}/.config";
      XDG_CACHE_HOME  = "\${HOME}/.cache";
      XDG_STATE_HOME  = "\${HOME}/.local/state";
      XDG_DATA_HOME   = "\${HOME}/.local/share";
      XDG_BIN_HOME    = "\${HOME}/.local/bin";
      PATH            = [
        "\${HOME}/prog/scripts"
      ];
    };
    nix.settings.use-xdg-base-directories = true;

    users.groups = {
      wheel = { };
      network = { };
    };

    users.users.defaultUser = {
      name = config.user.name;
      isNormalUser = true;
      extraGroups = [ "wheel" "network" ];
    };

    fonts = {
      enableDefaultPackages = true;
      packages = with pkgs; [
        cascadia-code
        (nerdfonts.override { fonts = [ "CascadiaCode" ]; })
        source-han-sans # Pan-CJK font
      ] ++ config.system.extraFonts;
    };

    system.autoUpgrade = lib.mkIf config.system.doAutoUpgrade {
      enable = true;
      flake = inputs.self.outPath;
      flags = [
        "--update-input"
        "nixpkgs"
        "--commit-lock-file"
        "-L"
      ];
      operation = "boot";
      dates = "22:30";
      randomizedDelaySec = "30min";
    };

  };
}
