{ self, config, lib, pkgs, ... }:
let inherit (lib) fileContents;
in
{

  # Cachix
  nix = {
    binaryCaches = [
      "https://cache.nixos.org/" 
      "https://nix-community.cachix.org"
    ];
    binaryCachePublicKeys = [
      "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
    ];
  };

  # For rage encryption, all hosts need a ssh key pair
  services.openssh = {
    enable = true;
    openFirewall = lib.mkDefault false;
  };

  # This is just a representation of the nix default
  nix.systemFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ];
  nix.registry.nixpkgs.flake = self.inputs.nixos;
  nix.registry.latest.flake = self.inputs.latest;

  # Fix zsh autocompletion with home-manager
  environment.pathsToLink = [ "/share/zsh" ];

  # We set this via home-manager
  environment.variables.EDITOR = "$EDITOR";

  services.logind.lidSwitch = "ignore";
   services.logind.extraConfig = ''
    # don’t shutdown when power button is short-pressed
    HandlePowerKey=ignore
  '';

  environment = {
    systemPackages = with pkgs; [
      agenix
      binutils
      coreutils
      psmisc
      asciinema
      curl
      direnv
      exa
      dnsutils
      dosfstools
      fd
      fzf
      git
      bat
      neovim
      bottom
      gptfdisk
      file
      iputils
      jq
      manix
      moreutils
      yt-dlp
      nix-index
      tmux
      nmap
      ripgrep
      skim
      tealdeer
      whois
      p7zip
      wget
      xxd
      imagemagick
      nushell

      nixpkgs-fmt
      nvfetcher
      libqalculate
    ];
  };

  fonts = {
    fonts = with pkgs; [ powerline-fonts dejavu_fonts twitter-color-emoji ];
    fontconfig.defaultFonts = {
      monospace = [ "DejaVu Sans Mono for Powerline" ];
      sansSerif = [ "DejaVu Sans" ];
      emoji = [ "Twitter Color Emoji" ];
    };
  };

  nix = {
    # Improve nix store disk usage
    autoOptimiseStore = true;
    gc.automatic = true;
    optimise.automatic = true;

    # Prevents impurities in builds
    useSandbox = true;

    # give root and @wheel special privileges with nix
    allowedUsers = [ "@wheel" ];
    trustedUsers = [ "root" "@wheel" ];

    # Generally useful nix option defaults
    extraOptions = ''
      keep-outputs = true
      keep-derivations = true
      fallback = true
    '';

  };

  time.timeZone = "Europe/Warsaw";
  i18n.defaultLocale = "en_US.UTF-8";

  # Service that makes Out of Memory Killer more effective
  services.earlyoom.enable = true;
  users.mutableUsers = false;
  console.keyMap = "pl";
}