{ lib, pkgs, ... }:

with lib;

{
  imports = [
    ./audio
    ./bluetooth
    ./btrfs
    ./desktop
    ./kodi
    ./nfs-mounts
    ./nvidia
    ./printing
    ./remote-build
    ./spotifyd
    ./users
    ./virtualisation
  ];

  config = {
    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";
    };
    time.timeZone = "America/Los_Angeles";

    services.xserver.xkb = {
      layout = "us";
      variant = "";
      options = "caps:escape";
    };

    # Don't go to emergency mode if we aren't able to mount filesystems.
    # This is silly if you have multiple hard drives or partitions
    # configured on a machine and then one goes away intentionally or
    # unintentionally. If the system is already booting, let it continue
    # to try and boot.
    systemd.enableEmergencyMode = false;

    # Enable the OpenSSH daemon.
    services.openssh.enable = true;

    environment.systemPackages = with pkgs; [
      git
      glances
      pciutils
      tree
      usbutils
      vim
    ];

    nix = {
      package = pkgs.nix;
      # distributedBuilds = true;
      # buildMachines = [{
      #   hostName = "z790prors.oglehome";
      #   system = "x86_64-linux";
      #   protocol = "ssh-ng";
      #   sshUser = "johno";
      #   sshKey = "/root/.ssh/id_ed25519";
      #   maxJobs = 3;
      #   speedFactor = 2;
      # }];
      settings = {
        experimental-features = [ "nix-command" "flakes" ];
        max-jobs = "auto";
        trusted-users = [ "johno" ];
        substituters = [
        ];
      };

      gc = {
        automatic = true;
        randomizedDelaySec = "14m";
        options = "--delete-older-than 10d";
      };
    };

    nixpkgs.config.allowUnfree = true;
  };
}
