{ config, lib, pkgs, timeZone, ... }:
let
  srvConfig = config.serverConfig;
in
{
  options.serverConfig= {
    userName = lib.mkOption {
        type = lib.types.str;
        description = "Main username for system";
    };
    hostName = lib.mkOption {
        type = lib.types.str;
        description = "Hostname for system";
    };
    hostId = lib.mkOption {
      type = lib.types.str;
      description = "Host ID";
    };
    email = lib.mkOption {
      type = lib.types.str;
      description = "Email for server box";
    };
    sshEnable = lib.mkOption {
      default = false;
      description = "Whether to enable ssh server";
    };
    nfsEnable = lib.mkOption {
      default = false;
    };
  };

  imports = [
    ./modules/user/main_user.nix
  ];
  
  config = {
    # Enable flakes feature
    nix.settings.experimental-features = [
      "nix-command" "flakes"
    ];

    boot.loader.systemd-boot.enable = true;
    boot.loader.efi.canTouchEfiVariables = true;

    networking = {
      hostId = srvConfig.hostId;
      hostName = srvConfig.hostName; # Define your hostname.
      # Pick only one of the below networking options.
      # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.
      networkmanager.enable = true;  # Easiest to use and most distros use this by default.
    };

    time.timeZone = timeZone;
 
    main_user = {
      enable = true;
      userName = srvConfig.userName;
      isDesktopUser = false;
    };

    environment.systemPackages = with pkgs; [
      docker
      docker-compose
      zsh
    ];

    programs.zsh.enable = true;

    services.openssh = lib.mkIf srvConfig.sshEnable {
      enable = true;
    };

    services.nfs.server = lib.mkIf srvConfig.nfsEnable {
      enable = true;
      exports = ''
        /kage 192.168.1.149(rw,fsid=0,no_subtree_check)
      '';
    };

    networking.firewall.allowedTCPPorts = [ 2049 ];

    # networking.firewall.allowedTCPPorts = [ ... ];
    # networking.firewall.allowedUDPPorts = [ ... ];

    system.stateVersion = "23.11"; # Did you read the comment?
  };
}