{ config, lib, ... }:
with lib;
let cfg = config.custom.static-ip;
in {
  options.custom.static-ip = {
    enable = mkEnableOption "Enables static-ip";
    ip = lib.mkOption {
      type = types.str;
      description = "ipv4 address";
    };
    dns = lib.mkOption {
      type = types.str;
      description = "ip of the dns server";
    };
    interface = lib.mkOption {
      type = types.str;
      description = "interface to apply the change to";
    };
    gateway = lib.mkOption {
      type = types.str;
      default = "192.168.0.1";
      description = "Default gateway";
    };
  };
  config =
    let fallback = "1.1.1.1";
    in mkIf cfg.enable {
      networking = {
        defaultGateway = cfg.gateway;
        useDHCP = false;
        nameservers = [ cfg.dns ]
          ++ lib.lists.optionals (!config.services.resolved.enable) [ fallback ];
        interfaces = {
          ${cfg.interface} = {
            name = "eth0";
            ipv4.addresses = [{
              address = cfg.ip;
              prefixLength = 24;
            }];
          };
        };
      };

      services.resolved = lib.mkIf config.services.resolved.enable {
        llmnr = "false";
        fallbackDns = [ "1.1.1.1" ];
      };
    };
}
