{ ... }:
{
  # Allow installation of proprietary software.
  nixpkgs.config.allowUnfree = true;

  nix.settings = {
    # Deduplicate store automatically. Slows down switches a bit, but saves space.
    auto-optimise-store = true;

    # Allow use of flakes.
    experimental-features = [
      "nix-command "
      "flakes"
    ];

    # When running GC, keep .drv files.
    keep-derivations = true;

    # When running GC, keep build dependencies.
    keep-outputs = true;

    # Run GC automatically when there's a less free space than specified.
    min-free = 1 * 1000 * 1000 * 1000;
  };

  # NOTE: Currently I run GC completely, but this setting (put above near min-free)
  # can stop GC when you hit 101 GB of free space available.
  # max-free = ${toString 101 * 1024 * 1024 * 1024}

  # NOTE: Enable this if you want to run GC on schedule. I instead use `min-free`.
  # nix.gc = {
  #   automatic  = true;
  #   dates      = "weekly";
  #   options    = "--delete-older-than 30d";
  #   persistent = true;
  # };
}