# The default shared configuration for the entire list of hosts for
# this cluster. Take note to only set as minimal configuration as
# possible since we're also using this with the stable version of
# nixpkgs.
{ options, lib, pkgs, ... }: {
  # Initialize some of the XDG base directories ourselves since it is
  # used by NIX_PROFILES to properly link some of them.
  environment.sessionVariables = {
    XDG_CACHE_HOME = "$HOME/.cache";
    XDG_CONFIG_HOME = "$HOME/.config";
    XDG_DATA_HOME = "$HOME/.local/share";
    XDG_STATE_HOME = "$HOME/.local/state";
  };

  # Find Nix files with these! Even if nix-index is already enabled, it
  # is better to make it explicit.
  programs.command-not-found.enable = false;
  programs.nix-index.enable = true;

  # BOOOOOOOOOOOOO! Somebody give me a tomato!
  services.xserver.excludePackages = with pkgs; [ xterm ];

  # Append with the default time servers. It is becoming more unresponsive as
  # of 2023-10-28.
  networking.timeServers = [
    "europe.pool.ntp.org"
    "asia.pool.ntp.org"
    "time.cloudflare.com"
  ] ++ options.networking.timeServers.default;

  # Disable channel state files. This shouldn't break any existing
  # programs as long as we manage them NIX_PATH ourselves.
  nix.channel.enable = lib.mkDefault false;

  # Please clean your temporary crap.
  boot.tmp.cleanOnBoot = lib.mkDefault true;

  # We live in a Unicode world and dominantly English in technical fields so we'll
  # have to go with it.
  i18n.defaultLocale = lib.mkDefault "en_US.UTF-8";

  # Enabling some things for sops.
  programs.gnupg.agent = lib.mkDefault {
    enable = true;
    enableSSHSupport = true;
  };
  services.openssh.enable = lib.mkDefault true;

  # It's following the 'nixpkgs' flake input which should be in unstable
  # branches. Not to mention, most of the system configurations should
  # have this attribute set explicitly by default.
  system.stateVersion = lib.mkDefault "23.11";
}