{ config, pkgs, ... }:
{
  # Firmware.
  #
  # Enables e.g. Intel microcode updates.
  # Defaults to `config.hardware.enableAllFirmware`.
  #hardware.enableRedistributableFirmware = true;
  hardware.enableAllFirmware = true;

  # Allow unfree packages.
  nixpkgs.config.allowUnfree = true;

  # Bootloader.
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  # Enables wireless support via wpa_supplicant.
  # networking.wireless.enable = true;

  # Enable networking.
  networking.networkmanager.enable = true;

  networking.nameservers = [
    # https://www.kuketz-blog.de/empfehlungsecke/#dns
    # dot.ffmuc.net (supports DNSSEC)
   "5.1.66.255" "185.150.99.255"
    # https://www.kuketz-blog.de/empfehlungsecke/#dns
    # unfiltered.adguard-dns.com (supports DNSSEC)
   "94.140.14.140" "94.140.14.141"
  ];

  # Set your time zone.
  time.timeZone = "Europe/Berlin";

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

  console = {
    #font = "Lat2-Terminus16";
    # Configure console keymap.
    keyMap = "de-latin1-nodeadkeys";
  };

  # Define a user account.
  # Don't forget to set a password with `passwd`.
  users.users.yoda = {
    isNormalUser = true;
    description = "Yoda";
    extraGroups = [ "networkmanager" "wheel" ];
    packages = with pkgs; [
      # Nix dependency management.
      niv
    ];
  };

  # SystemMaxFileSize: Defaults to one eighth of the values configured with SystemMaxUse= and RuntimeMaxUse=, so that usually seven rotated journal files are kept as history.
  # MaxFileSec: To ensure that not too much data is lost at once when old journal files are deleted, it might make sense to change this value from the default of one month.
  # https://www.freedesktop.org/software/systemd/man/journald.conf.html
  services.journald.extraConfig = ''
    SystemMaxUse=800M
    MaxFileSec=7day
  '';

  nix.settings.auto-optimise-store = true;

  # https://nixos.wiki/wiki/Storage_optimization#Automation
  nix.gc = {
    automatic = true;
    dates = "weekly";
    # Options given to nix-collect-garbage.
    # They are documented here: https://nixos.org/manual/nix/stable/command-ref/nix-collect-garbage
    # The `--delete-older-than <period` option refers the manual for `nix-env --delete-generations <period>`: https://nixos.org/manual/nix/stable/command-ref/nix-env/delete-generations#generations-time
    # There, two meanings of <period> are described. The second one is:
    #   +<number>: Keep the last number generations, along with any newer than current.
    # TODO: +7 does currently not work. There is an open issue: https://github.com/NixOS/nixpkgs/issues/282884
    options = "--delete-older-than +7";
  };

  # Delete all files in /tmp during boot.
  boot.tmp.cleanOnBoot = true;

  # Whether to install NixOS’s own documentation.
  documentation.nixos.enable = false;

  # Firewall.
  # https://nixos.wiki/wiki/Firewall
  # Note: Firewall rules may be bypassed/overwritten by Docker, as per https://github.com/NixOS/nixpkgs/issues/111852
  networking.firewall.enable = true;
}
