{ config, lib, pkgs, ... }:

{
  imports = [
    ./hardware-configuration.nix

    ../../base.nix
    ../../common/metrics-exporters.nix

    ./services/mysql.nix
    ./services/nginx.nix
    ./services/www-kinealbrigtsen-no.nix
  ];

  networking = {
    hostName = "malcolm";
    bridges.br0.interfaces = [ "ens18" ];
    interfaces.br0.useDHCP = false;
    interfaces.br0.ipv4.addresses = [
      { address = "192.168.11.106"; prefixLength = 24; }
    ];

    hostId = "620c42d0";
    defaultGateway = "192.168.11.1";

    # Prepend the following output rules to disallow talking to other devices on LAN
    firewall.extraCommands = lib.strings.concatLines ([
      "iptables -F OUTPUT"
    ] ++ (map (addr: "iptables -A OUTPUT -p udp --dport 53 -d ${addr} -j nixos-fw-accept") config.networking.nameservers) ++ [ # Exception for DNS
      "iptables -A OUTPUT -p tcp --dport 3100 -d 192.168.10.175 -j nixos-fw-accept" # Exception for loki logging
      "iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT"
      "iptables -A OUTPUT -d 192.168.10.0/24 -j nixos-fw-refuse"
      "iptables -A OUTPUT -d 192.168.11.0/24 -j nixos-fw-refuse"
    ]);
  };

  # virtualisation.oci-containers.backend = "docker";
  # systemd.services.docker.postStart = lib.concatMapStringsSep "\n" (rule: "${pkgs.iptables}/bin/iptables ${rule}") ([
  #   "-F DOCKER-USER"
  # ] ++ (map (addr: "-A DOCKER-USER -p udp --dport 53 -d ${addr} -j RETURN") config.networking.nameservers) ++ [
  #   "-A DOCKER-USER -d 192.168.10.0/24 -j REJECT"
  #   "-A DOCKER-USER -d 192.168.11.0/24 -j REJECT"
  #   "-A DOCKER-USER -j RETURN"
  # ]);

  system.stateVersion = "24.05";
}