{
  tree,
  lib,
  ...
}: let
  inherit (lib.lists) forEach;
in {
  imports = with tree;
    [
      presets.nixos.serverBase
      presets.nixos.serverHetzner
      presets.nixos.serverEncryptedDrive

      profiles.nginx
      profiles.firewallAllow.httpCommon

      # profiles.chaosInternalWireGuard

      ./hardware.nix
      ./secrets.nix
    ]
    ++ (forEach [
      "storage"
      "mail"
      "forgejo"
      "caldav"
      "jellyfin"
      #"grocy"
      "vault"
      "music"
    ] (name: ./containers + "/${name}"))
    ++ (with hosts.hetzner-arm.profiles; [
      staticSites
      gotosocial
      restic
    ]);

  # TODO: environment.noXlibs = true;

  nixpkgs.overlays = [
    (_final: prev: {
      # So we don't need to build all Vault
      # when we already are using vault-bin on this server
      vault = prev.vault-bin;

      # Have no need for HW Accel, hoping it works with this
      jellyfin-ffmpeg = prev.ffmpeg_6-headless;

      ffmpeg = prev.ffmpeg-headless;
      ffmpeg_4 = prev.ffmpeg_4-headless;
      ffmpeg_5 = prev.ffmpeg_5-headless;
      ffmpeg_6 = prev.ffmpeg_6-headless;
      ffmpeg_7 = prev.ffmpeg_7-headless;

      mpd = prev.mpd-headless;
    })
  ];

  # TODO: system.forbiddenDependenciesRegexes = ["libX11*"];

  # For Containers
  networking.nat = {
    enable = true;
    internalInterfaces = ["ve-+"];
    externalInterface = "enp1s0";
  };

  networking.hostName = "hetzner-arm";

  home-manager.users.root.home.stateVersion = "24.05";
  system.stateVersion = "24.05";
}