{ lib,  pkgs, hostname, stateVersion, username, desktop, system, ... }: {
  imports = [ 
      # Services
      ./common/services/openssh.nix
      ./common/services/fail2ban.nix

      # NixOS Modules
      ./common/modules/networking.nix      # Initial Networking configs
      ./common/modules/nixos.nix           # NixOS related items
      ./common/modules/remote-builders.nix # Add remote builders

      ./users/${username}
      ./hosts/${hostname}
    ] ++ lib.optional (builtins.isString desktop) ./common/desktops/${desktop};
  
  # List packages installed in system profile
  environment.systemPackages = with pkgs; [
    tmux
    dconf
    ripgrep
    sbctl
    wget
    killall
    curl
    rsync
    git
    bat
    duf
    ncdu
    du-dust
    btop
    iftop
    nload
    iotop
    sops
    gnupg
    cryptsetup
    parted
    screen
    sshpass
    fd
  ];

  # Select internationalisation properties.
  i18n.defaultLocale = "en_US.UTF-8";
  i18n.extraLocaleSettings = {
    LC_ADDRESS = "en_US.UTF-8";
    LC_IDENTIFICATION = "en_US.UTF-8";
    LC_MEASUREMENT = "en_US.UTF-8";
    LC_MONETARY = "en_US.UTF-8";
    LC_NAME = "en_US.UTF-8";
    LC_NUMERIC = "en_US.UTF-8";
    LC_PAPER = "en_US.UTF-8";
    LC_TELEPHONE = "en_US.UTF-8";
    LC_TIME = "en_US.UTF-8";
  };

  # https://github.com/NixOS/nixpkgs/issues/180175#issuecomment-1658731959
  systemd.services.NetworkManager-wait-online = {
    serviceConfig = {
      ExecStart = [ "" "${pkgs.networkmanager}/bin/nm-online -q" ];
    };
  };

  system.stateVersion = stateVersion;
  nixpkgs.hostPlatform = system;
}