{ self, pkgs, config, ... }: {

  imports = [
    ../common/darwin
    ../../modules/common
    ./hotkeys.nix
  ];

  # To reflect hotkeys without a login cycle.
  system.activationScripts.postActivation.text = ''
  sudo -u ${config.user.name} /System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u
  '';

  power.sleep.display = 10;

  # Popups for special characters for some keys.
  system.defaults.NSGlobalDomain.ApplePressAndHoldEnabled = false;

  # List packages installed in system profile. To search by name, run:
  # $ nix-env -qaP | grep wget
  environment.systemPackages = with pkgs; [
    neofetch
  ];

  user.name = "jmug";

  system.primaryUser = config.user.name;

  homebrew = {
    enable = true;
    onActivation = {
      autoUpdate = true;
      cleanup = "uninstall";
      upgrade = true;
    };
  
    caskArgs = {
      no_quarantine = false;
    };

    taps = [
      # "agavra/tap"
    ];
    brews = [
      "watchman"
      "vite"
      "pipx"
      "python@3.11"
      "glow"
      "chromaprint"
      "libiconv"
      # "agavra/tap/tuicr"
      "automake"
      "autoconf"
      "pkg-config"
      "libusb"
      "minicom"
      "picocom"
      "tio"
    ];
    casks = [
      "orbstack"
      "ghostty"
      "kicad"
      "secretive"
      "gcc-arm-embedded" # Maybe defer this to individual porject flakes.
      "karabiner-elements"
      "raycast"
      "insta360-link-controller"
      "yubico-authenticator" # TODO: Defer to a module that manages yubikeys for darwin.
      "google-chrome"
      "nrf-connect"
      "segger-jlink"
      "whatsapp"
      "slack"
      "discord"
      "calibre"
      "trilium-notes"
    ];
  };

  fonts.packages = with pkgs; [
    nerd-fonts.bigblue-terminal
  ];

  users.users.${config.user.name}.home = config.user.homeDirectory;

  nixpkgs.config.allowUnfree = true;
  
  programs.zsh.enable = true;

  # Necessary for using flakes on this system.
  nix.settings.experimental-features = "nix-command flakes";

  # Set Git commit hash for darwin-version.
  system.configurationRevision = self.rev or self.dirtyRev or null;

  # Used for backwards compatibility, please read the changelog before changing.
  # $ darwin-rebuild changelog
  system.stateVersion = 6;

  # The platform the configuration will be used on.
  nixpkgs.hostPlatform = "aarch64-darwin";
}
